(selenium 六)unittest通过测试套件组织用例 (2)

上一边文章中,all_tests.py文件与测试用例都位于同一文件见。下面通过在测试用例文件夹下添加__init__.py形成包文件,然后再all_test.py中添加PATH路径导入包即可。具体操作如下:

1、在test_case文件夹下新建__init__.py文件,

import baidu
import youdao

2、将all_test.py移至test_case文件夹所在目录,

#coding = utf-8
import unittest

#把test_case 目录添加到path 下,这里用的相对路径
import sys
sys.path.append(r"F:\技术提高学习\自动化框架\web自动化\实例\实例6.1_unittest通过测试套件组织用例\test_case")
#from test_case import baidu, youdao  若__init.py内容为空,需手动导入模块
from test_case import *
import HTMLTestRunner
import time

testunit = unittest.TestSuite()
#将测试用例加入到测试容器(套件)中
testunit.addTest(unittest.makeSuite(baidu.Baidu)) #弊端:随着用例的增加,测试套件可能要罗列几百上千条用例,不便于管理
testunit.addTest(unittest.makeSuite(youdao.Youdao))

解决方案:用例文件组装一数组,用for来遍历

#coding = utf-8
import unittest
import sys
sys.path.append(r"F:\技术提高学习\自动化框架\web自动化\实例\实例6.1_unittest通过测试套件组织用例\test_case")
from test_case import *
import HTMLTestRunner
import time

#将用例组装数组
alltestnames = [baidu.Baidu, youdao.Youdao] #弊端:每次新增或删除用例时,都要改动该文件

#创建测试套件
testunit = unittest.TestSuite()
for test in alltestnames:
    testunit.addTest(unittest.makeSuite(test))

解决方案:把alltestnames 数组放到一个单独的文件中,创建allcase_list.py 文件,与all_tests.py 保持同级目录

新增allcase_list.py

#coding = utf-8
import sys
sys.path.append(r"F:\技术提高学习\自动化框架\web自动化\实例\实例6.1_unittest通过测试套件组织用例\test_case")
from test_case import *

#用例文件列表
def caselist():
	alltestnames = [
		baidu.Baidu,
		youdao.Youdao
		]
	print('success read case list!')
	return alltestnames

all_tests.py做相应修改

import allcase_list

#获取数组方法
alltestnames = allcase_list.caselist()
问题:如新建一条用例aaa.py,仍需要改动两个文件__init__.py、allcase_list.py

需要在用例当前目录下打开__init__.py 文件,添加“import aaa”;

还需要打开allcase_list.py 文件,在alltestnames 数组中添加aaa.calss_name 。然后,用例才能添加到测试套件中执行。

原因:引入了HTMLTestRunner测试报告,需要用runner.run(testunit)(否则可以直接用unittest.main()来执行)

解决方案:TestLoader 下的discover()方法来实现,以通过文件的名称来判断是否为测试用例文件,如为用例文件则自动添加到测试套件中

1、删除__init__.py、allcase_list.py文件

2、重命名待测测试用例,命名规则符合discover函数规则

3、修改all_tests.py

#coding = utf-8
import unittest
import HTMLTestRunner
import time, os

listcasedir = r"F:\技术提高学习\自动化框架\web自动化\实例\实例6.2_unittest通过testloader加载用例\test_case"
def  creatsuitel():
	testunit = unittest.TestSuite()
	#discover方法定义
	discover = unittest.defaultTestLoader.discover(listcasedir, pattern ='start*.py', top_level_dir = None)

	#discover 方法筛选出来的用例,循环添加到测试套件中
	for test_suite in discover:
		for test_case in test_suite:
			testunit.addTests(test_case)
			print(testunit)
	return testunit

alltestnames = creatsuitel()

now = time.strftime("%Y-%m-%M-%H_%M_%S",time.localtime(time.time()))
filename = r"F:\技术提高学习\自动化框架\web自动化\实例\实例6.2_unittest通过testloader加载用例\{0}result.html".format(now)
print(filename)
fp = open(filename, 'wb')
#执行测试用例
runner = HTMLTestRunner.HTMLTestRunner(stream = fp, title = '百度搜索测试报告', description = '测试执行情况')
runner.run(alltestnames)


语法点:

TestLoader:测试用例加载器,其包括多个加载测试用例的方法。返回一个测试套件。
discover(start_dir,pattern='test*.py',top_level_dir=None)
找到指定目录下所有测试模块,并可递归查到子目录下的测试模块,只有匹配到文件名才能被加载。
如果启动的不是顶层目录,那么顶层目录必须要单独指定。
start_dir :要测试的模块名或测试用例目录。
pattern='test*.py' :表示用例文件名的匹配原则。星号“*”表示任意多个字符。


你可能感兴趣的:(web自动化)