selenium之unittest批量执行测试用例、生成html报告

来源:互联网 发布:js ajax视频教程 编辑:程序博客网 时间:2024/06/08 02:45

一、unittest 批量执行

我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittet 里面的 discover 方法来加载用例了。

加载用例后,用 unittest 里面的 TextTestRunner 这里类的 run 方法去一次执行多个脚本的用例。

二、新建测试项目

1.打开pycharm,左上角File>New Projetc>Pure Python,在 location 位置命名一个测试工程的名称:MTbaby 然后保存,这里自己按照喜欢的名字去命名哦。

这里写图片描述

2.选中刚才新建的工程右键>New>Python Package>新建两个Python Package,分别命名为case 和 report,

这里写图片描述

3.在case文件夹中创建两个 Python Package,分别命名为 baidu和blog

这里写图片描述

4.在baidu文件夹中创建test_01.py,test_02.py两个文件;
在blog文件夹中创建test_03.py,test_04.py两个文件;
在report文件夹中创建run_all_case.py,result.html两个文件;
如图:

这里写图片描述

接下来用run_all_case.py脚本去批量执行所有的用例。

三、diascover 加载测试用例

1).discover 方法里面有三个参数:

  • case_dir:这个是待执行用例的目录。
  • pattern:这个是匹配脚本名称的规则,test*.py 意思是匹配 test 开头的所有脚本。
  • top_level_dir:这个是顶层目录的名称,一般默认等于 None 就行了。

2).discover 加载到的用例是一个 list 集合,需要重新写入到一个 list 对象
testcase 里,这样就可以用 unittest 里面的 TextTestRunner 这里类的 run 方法去执行。

3).我们先在test_01.py,test_02.py,test_03.py,test_04.py这四个文件中分别写几个测试用例,比如分别执行加减乘除运算:

test_01.py文件

#-*- coding:utf-8 -*-import unittestclass Test(unittest.TestCase):    u'''这是加法运算'''    def testadd(self):        result = 10+8        hope = 18        self.assertEqual(result,hope)

test_02.py文件

#-*- coding:utf-8 -*-import unittestclass Test(unittest.TestCase):    u'''这是减法运算'''    def testjianfa(self):        result = 10-8        hope = 2        self.assertEqual(result,hope)

test_03.py文件

#-*- coding:utf-8 -*-import unittestclass Test(unittest.TestCase):    def testcheng(self):        result = 10*8        hope = 80        self.assertEqual(result,hope)

test_04.py文件

#-*- coding:utf-8 -*-import unittestclass Test(unittest.TestCase):    def testchu(self):        result = 10/5        hope = 2        self.assertEqual(result,hope)

接下来就是run_all_case.py文件:

#-*- coding:utf-8 -*-import unittest#执行测试用例的目录case_dir = r"F:\MTbaby\case"  #这里填写你刚刚创建的case文件夹的目录testcase = unittest.TestSuite()discover = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)#discover方法筛选出来的用例,循环添加到测试套件中for test_suit in discover:    for test_case in test_suit:        #添加用例到testcase        testcase.addTest(test_case)print testcase

运行结果:

C:\Python27\python.exe F:/MTbaby/report/run_all_case.py....<unittest.suite.TestSuite tests=[<unittest.suite.TestSuite tests=[<baidu.test_01.Test testMethod=testadd>]>, <unittest.suite.TestSuite tests=[<baidu.test_02.Test testMethod=testjianfa>]>, <unittest.suite.TestSuite tests=[<blog.test_03.Test testMethod=testcheng>]>, <unittest.suite.TestSuite tests=[<blog.test_04.Test testMethod=testchu>]>]>Time Elapsed: 0:00:00.007000Process finished with exit code 0

四、 run 测试用例

1).为了更方便的理解,可以把上面 discover 加载用例的方法封装下,写成一个函数
2).先返回 TextTestRunner()类的实例
3).调用 run 方法去执行 all_case()这个函数

#-*- coding:utf-8 -*-import unittestdef all_case():    #执行测试用例的目录    case_dir = r"F:\MTbaby\case"    testcase = unittest.TestSuite()    discover = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)    #discover方法筛选出来的用例,循环添加到测试套件中    for test_suit in discover:        for test_case in test_suit:            #添加用例到testcase            testcase.addTest(test_case)    print testcase    return testcaseif __name__=="__main__":    #返回实例    runner = unittest.TextTestRunner()    #run所有用例    runner.run(all_case())

五、生成html报告

批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成 HTML 格式的。
unittest 里面是不能生成 html 格式报告的,需要导入一个第三方的模块:
HTMLTestRunner。

1.导入 HTMLTestRunner

1).这个模块下载不能通过 pip 安装了,只能下载后手动导入,下载地址:
http://tungwaiyip.info/software/HTMLTestRunner.html

这里写图片描述

2).把 HTMLTestRunner.py 这个文件保存到python的安装目录Lib下。
3).可以点击打开,然后复制保存成.py格式文件,然后复制到python安装目录的Lib目录下即可。

2.demo 解析

1).下载 Download 下的第二个文件 test_HTMLTestRunner.py,这个就是官方给的一个测试 demo 了,从这个文件可以找到该模块的用法。
2).找到下图这段,就是官方给的一个 demo 了,test_main()里上半部分就是加载测试 case,我们不需要搞这么复杂。
3).最核心的代码是下面的红色区域。

这里写图片描述

3.生成 html 报告

1).我们只需把上面红色区域代码 copy 到上一篇的基础上稍做修改就可以了,这里主要有三个参数:

  • stream:测试报告写入文件的存储区域
  • title:测试报告的主题
  • description:测试报告的描述

2).report_path 是存放测试报告的地址

所以我们可以修改run_all_case.py文件。

#-*- coding:utf-8 -*-import unittestdef all_case():    #执行测试用例的目录    case_dir = r"F:\MTbaby\case"    testcase = unittest.TestSuite()    discover = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py',top_level_dir=None)    #discover方法筛选出来的用例,循环添加到测试套件中    for test_suit in discover:        for test_case in test_suit:            #添加用例到testcase            testcase.addTest(test_case)    print testcase    return testcaseif __name__=="__main__":    #返回实例    #runner = unittest.TextTestRunner()    import HTMLTestRunner    report_path = r"F:\MTbaby\report\result.html"#这里就是你创建result.html    fp = open(report_path, 'wb')    runner = HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'这是我的自动化测试报告',description=u'测试用例执行情况:')    # run所有用例    runner.run(all_case())    fp.close()

4.测试报告详情

打开你的result.html文件,会看到已经有测试报告了,哈哈~~
点开 View 里的 Detail 可以查看详情描述。

这里写图片描述

这里是全部pass的情况,我们来看一下执行测试用例failed的情况:修改test_01.py文件为:

#-*- coding:utf-8 -*-import unittestclass Test(unittest.TestCase):    u'''这是加法运算'''    def testadd(self):        result = 10+8        hope = 20   #这里结果我们写成错误的        self.assertEqual(result,hope)

再次执行run_all_case.py脚本,然后刷新result.html文件:

这里写图片描述

我们看到有一个fail的结果,点开可看到错误产生的原因,是不是很方便啊~~~快去试试吧~

这里写图片描述

阅读全文
1 0
原创粉丝点击