python+selenium+unittest 批量执行测试用例 亲

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

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

二、新建测试项目
1.打开pycharm,左上角File>New Projetc>Pure Python,在 location 位置命名一个测试工程的名称:selenium_UnitTest 然后保存。

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

3.在case文件夹中创建几个 Python Package,分别命名为如下:Model,SysManage,Tenant

4.在case下的子文件夹中创建test_xx.py,test_xx.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).我们先在case下的子文件.py中分别写几个测试用例:

接下来就是编写run_all_case.py文件:


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.007000

Process finished with exit code 0

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

#-*- coding:utf-8 -*-
import unittest
def 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 testcase
if __name__=="__main__":
    #返回实例
    runner = unittest.TextTestRunner()
    #run所有用例
    runner.run(all_case())

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

1.导入 HTMLTestRunner

1) 用pip命令安装HTMLTestRunner,pip命令如下:

pip install html-testRunner

html-testRunner · PyPI 官网

这个命令一般默认安装的是最新版本的,网上有许多美化后的,是一个.py文件,安装路径一般在F:\Program Files\Python3.4.3\Lib\site-packages  这个文件夹里面的文件移到python根目录

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 unittest
def 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 testcase
if __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 unittest
class Test(unittest.TestCase):
    u'''这是加法运算'''
    def testadd(self):
        result = 10+8
        hope = 20   #这里结果我们写成错误的
        self.assertEqual(result,hope)

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

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

import unittest
import HtmlTestRunner
import time
file_path = "C:\\CTT\\CPUnitTest_Project\\report\\"
runner = HtmlTestRunner.HTMLTestRunner(output=file_path)
case_dir = r"C:\\CTT_UnitTest_Project\\case"
suite = unittest.TestSuite()
tests = unittest.defaultTestLoader.discover(case_dir,pattern='test*.py')
suite.addTests(tests)
now = time.strftime("%Y%m%d-%H%M%S", time.localtime())
reportFile = 'testResult' + now + '.html'
file = open(reportFile, 'wb')
runner.run(suite)

 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.youkuaiyun.com/mtbaby/article/details/77651488

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值