unittest框架及测试报告生成

企业中web自动化测试不仅仅是面向过程式的编写,我们需要将其封装写在类中,并在运行后生成测试报告,目前市面上比较流行的框架有unintest单元测试框架以及pytest框架,今天我们来了解下unittest框架的使用及原理!

首先我们可以简单的看下一个小的demo:
unittest框架及测试报告生成_第1张图片
通过上图,首先我们看到我们要使用unittest的框架,我们需要先继承这个框架,(关于类与方法的模块,同学们可以参考之前课程python方法及面向对象了解),然后我们在执行的时候用的是下面的main方法进行运行的。首先我们会观察到,上面三个方法怎么只允许了两个呢?还有问什么我们执行方法的顺序也不是从上到下执行的呢?这就涉及到unittest的运行原理了,unittest运行只会运行类中的以test开头的方法当做测试用例,其他方法不会执行。其次执行的顺序是根据[0-9]–>[A-Z]–>[a-z]的顺序执行的。

if __name__ == '__main__':
    unittest.main(verbosity=2)

我们可以在main方法内添加一个verbosity参数可以看到用例的执行顺序。

unittest中还有几个固定方法以便于我们测试用到的:

setUpClass:所有用例的前置条件(执行用例前运行一次这个方法)

tearDownClass:所有用例执行完后(所有用例运行结束后执行一次这个方法)

setUp:单个前置条件(每执行一个用例前就运行一次该方法,有多少用例就执行多少次)

tearDown:单个用例执行完后(每执行一个用例后就运行一次该方法,有多少用例就执行多少次)
unittest框架及测试报告生成_第2张图片

由上图所示,我们可以看出类前置条件与结束条件,上面加了一个装饰器,类方法@classmethod,意思是类执行维度的方法,这个装饰器是必须的。类前置与后置分别是在最前与最后执行,单个用例的前置与后置则是有两个用例分别执行了两次。每个前置与后置,个人在使用时可酌情编写,并非强制需要用到这些方法!

接下来我们用实际的selenium做个demo:

import time,unittest
from selenium import webdriver

class TestDemo(unittest.TestCase):
    @classmethod
    def setUpClass(cls):    # 类前置
        cls.driver = webdriver.Chrome()  # 打开浏览器
        cls.driver.maximize_window()    # 窗口最大化
        cls.driver.get('https://www.baidu.com/')   # 打开百度
        print("执行开始-----------")

    def setUp(self):
        self.driver.implicitly_wait(3)   # 单用例前置  隐式等待3秒
    def tearDown(self):    # 单用例后置
        self.str1 = TestDemo.timeapp()    # 调用timeapp方法
        # 用例结束后将当前屏幕截屏保存并命名
        self.driver.save_screenshot(r'./{}'.format('测试' + self.str1 + '.png'))

    @classmethod
    def tearDownClass(cls):   # 类后置
        cls.driver.quit()   # 退出浏览器
    @classmethod
    def timeapp(self):
        date = time.localtime()   #获取当前时间
        str1 = time.strftime('%Y%m%d%H%M%S',date)  #将当前时间戳转为字符串
        return str1
    def test_001(self):
        self.driver.find_element_by_id('kw').send_keys('零基础Python自动化')
        self.driver.find_element_by_id('su').click()
        time.sleep(5)

if __name__ == '__main__':
    unittest.main(verbosity=2)

根据上述代码我们可以看到先执行类前置打开了浏览器,然后隐式等待3秒,打开百度,输入"零基础Python自动化"后点击搜索,保存屏幕,退出了浏览器。

测试报告的生成

我们既然可以执行了自动化测试用例,那么我们到最后应当生成一个测试报告,这样我们能够直观的看到用例执行了多少,成功失败了多少。

测试报告的生成需要引用一个外部的包HTMLTestRunner,同学们可自行网上下载,HTMLTestRunner下载地址:

https://pan.baidu.com/s/109CsITMEm5Vqgdw6Yz68HA

提取码:eeji

接下来我们讲下如何与unittest结合生成测试报告。首先我们执行用例并生成测试报告,需要导入这个包中的HTMLTestRunner类,然后创建一个测试套件,添加我们需要执行的测试用例,然后执行我们的测试用例并生成测试报告!

if __name__ == '__main__':
    # unittest.main(verbosity=2)   #unittest.main()与htmltestrunner不能同时存在
    testsuit = unittest.TestSuite()  #创建测试集
    # testsuit.addTests([TestDemo('test_001'), TestDemo('test_002')])  # 添加需要报告的用例列表
    testsuit.addTests(unittest.TestLoader().loadTestsFromTestCase(TestDemo))  # 添加需要报告的整个类的用例
    go = open(r'./report.html', 'wb')  # 定义报告生成的路径
    runner = HTMLTestRunner(stream=go, title='测试报告', description='随便啥')  # 定义报告名,描述等
    runner.run(testsuit)  # 生成报告

当我们运行后当前路径下会生成一个report.html文件,复制路径用网页打开,我们会看到这样的一个测试报告
unittest框架及测试报告生成_第3张图片
有些同学可能会注意到,我们运行了以上的代码并没有生成测试报告,但是代码执行并没有报错,这里有一个坑,小编踩了多次才注意到python执行的方式有多种,unittest执行,py文件执行以及pytest执行方式,我们需要在pycharm修改下执行方式
unittest框架及测试报告生成_第4张图片
点击进入edit

unittest框架及测试报告生成_第5张图片

我们选择上面一种Python,点击做上架"+"在右边script path选择我们这次的文件路径,以及下面对应的Project工程,并在左边栏目把之前Python tests中的文件记录清除,然后应用保存,这个时候在点击运行,我们就可以看到了测试报告的生成!
unittest框架及测试报告生成_第6张图片
关于unittest框架及测试报告的生成,我们就了解这些,如碰到问题可联系小编,一起共同交流沟通!
关注下方,学习更多知识!
unittest框架及测试报告生成_第7张图片

你可能感兴趣的:(python,selenium,unittest)