unittest-装饰器-断言-生成测试报告

一、装饰器

前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间。

于是就想是不是可以只打开一次浏览器,执行完用例再关闭呢?这就需要用到装饰器(@classmethod)来解决了。

1.用setUp与setUpClass区别

setup():每个测试case运行前运行
teardown():每个测试case运行完后执行
setUpClass():必须使用@classmethod 装饰器,所有case运行前只运行一次
tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次

执行顺序

from selenium import webdriver
import time
import unittest
class BaiDu(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        print("开始运行类方法")
    @classmethod
    def tearDownClass(cls):
        print("结束运行类方法")
    def setUp(self):   #前置处理,每条用例运行前都会运行setup内容
        print("开始运行用例")
    def tearDown(self):#后置处理,每条用例运行后都会运行teardown内容
        print("结束运行用例")
    def test_01(self):#用例01
        print("用例1")
    def test_02(self):#用例02
        print("用例2")
if __name__=='__main__':
    # 方法一,执行所有用例
    unittest.main()

结果--

开始运行类方法开始运行用例
用例1
结束运行用例
开始运行用例
用例2
结束运行用例
结束运行类方法

二、断言

在测试用例中,执行完测试用例后,最后一步是判断测试结果是pass还是fail,自动化测试脚本里面一般把这种生成测试结果的方法称为断言(assert)。

用unittest组件测试用例的时候,断言的方法还是很多的,下面介绍几种常用的断言方法:assertEqual、assertIn、assertTrue

基本断言方法
基本的断言方法提供了测试结果是True还是False。所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回。

语法:self.assertEqual(first,second,msg='testcase error!')

序号    断言方法    断言描述
1    assertEqual(arg1, arg2, msg=None)    验证arg1=arg2,不等则fail
2    assertNotEqual(arg1, arg2, msg=None)    验证arg1 != arg2, 相等则fail
3    assertTrue(expr, msg=None)    验证expr是true,如果为false,则fail
4    assertFalse(expr,msg=None)    验证expr是false,如果为true,则fail
5    assertIs(arg1, arg2, msg=None)    验证arg1、arg2是同一个对象,不是则fail
6    assertIsNot(arg1, arg2, msg=None)    验证arg1、arg2不是同一个对象,是则fail
7    assertIsNone(expr, msg=None)    验证expr是None,不是则fail
8    assertIsNotNone(expr, msg=None)    验证expr不是None,是则fail
9    assertIn(arg1, arg2, msg=None)    验证arg1是arg2的子串,不是则fail
10    assertNotIn(arg1, arg2, msg=None)    验证arg1不是arg2的子串,是则fail
11    assertIsInstance(obj, cls, msg=None)    验证obj是cls的实例,不是则fail
12    assertNotIsInstance(obj, cls, msg=None)    验证obj不是cls的实例,是则fail
三、自动生成HTML报告

批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的。

unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLTestRunner.py(放到python的lib目录下面)

unittest不能自动发送邮箱,需要导入邮箱的模块,Email.py(放到项目目录下)

语法:

#批量执行脚本文件
import unittest
import time
from HTMLtestRunner import HTMLTestRunner
import Email
case_path=r'D:\pych\pycunchu\_ui_selenium\run_unin'
dis=unittest.defaultTestLoader.discover(start_dir=case_path,pattern="unin0*.py")
nowTime=time.strftime('%Y-%m-%d-%H-%M-%S')#更新的报告更名为匹配时间格式的HTML文件
reportname=nowTime + 'report.html'#时间加报告名称
dir=open(reportname,'wb')
runner=HTMLTestRunner(stream=dir,title='百度搜索ui测试',tester='zhangsan',description='用例执行情况如下:')
runner.run(dis)
email=Email.Sum_Mail(reportname,reportname)
email.send_mail()






上一篇:常用rman备份脚本


下一篇:【Python学习记录】2021年8月24日