您的位置:首页 > 其它

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

2016-06-02 14:11 627 查看
上一边文章中,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)) #<span style="color:#FF0000;">弊端:随着用例的增加,测试套件可能要罗列几百上千条用例,不便于管理</span>
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] #<span style="color:#33CC00;"><span style="color:#3333FF;">弊端:每次新增或删除用例时,都要改动该文件</span></span>

#创建测试套件
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' :表示用例文件名的匹配原则。星号“*”表示任意多个字符。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: