1、fixture-TestCase
定义的类,必须继承TestCase
fixture属于执行测试函数的前面以及之后处理的代码块
类级别
函数级别
import unittest class Test_01(unittest.TestCase): @classmethod def setUpClass(cls): """ 类级别 """ print("类开始") def setUp(self): """ 函数级别 """ print("函数开始") def test_01(self): print("我是测试test_01模块中的:test_01") def test_02(self): print("我是测试test_01模块中的:test_02") def tearDown(self): """ 函数级别 """ print("函数结束") @classmethod def tearDownClass(cls): """ 类级别 """ print("类结束") if __name__ == '__main__': unittest.main() |
运行结果:
类开始 .. 函数开始 我是测试test_01模块中的:test_01 函数结束 ---------------------------------------------------------------------- 函数开始 Ran 2 tests in 0.000s OK 我是测试test_01模块中的:test_02 函数结束 类结束 1 |
2、TestSuite-TextTestRunner
TestSuite(测试套件)用于添加多条测试用例-测试类可以存在不同的文件
加载指定类中的函数
加载类中的所有test开头的函数
TextTestRunner 用于执行测试用例和测试套件
import unittest class T1(unittest.TestCase): def test_01(self): print("我是T1类中的test_01") def test_02(self): print("我是T1类中的test_02") class T2(unittest.TestCase): def test_01(self): print("我是T2类中的test_01") if __name__ == '__main__': suite = unittest.TestSuite() # 类名(函数名)--指定加载函数 suite.addTest(T2("test_01")) # 类名--加载类中的所有测试函数 suite.addTest(unittest.makeSuite(T1)) runner = unittest.TextTestRunner() runner.run(suite) |
运行结果:
我是T2类中的test_01 ... 我是T1类中的test_01 我是T1类中的test_02 ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK |
3、TestLoader
TestLoader 用来添加测试用例,满足条件的用例
scripts/test_01.py
import unittest class T1(unittest.TestCase): def test_01(self): print("我是T1类中的test_01") def test_02(self): print("我是T1类中的test_02") class T2(unittest.TestCase): def test_01(self): print("我是T2类中的test_01") |
main.py
import unittest if __name__ == '__main__': # start_dir : 测试用例所在的文件夹 # pattern:匹配模式,默认 test*.py # suite = unittest.TestLoader().discover(start_dir="./scripts", pattern="test*.py") suite = unittest.defaultTestLoader.discover(start_dir="./scripts", pattern="test*.py") runner = unittest.TextTestRunner() runner.run(suite) |
运行结果:
我是T1类中的test_01 我是T1类中的test_02 我是T2类中的test_01 ... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK |
4、 断言
import unittest class T1(unittest.TestCase): def test_01(self): # msg 不成立则打印 self.assertTrue(True, msg="不是True") self.assertFalse(False, msg="不是False") self.assertEqual(1, 1, msg="两个比较数不相等") self.assertNotEqual(1, 2, msg="两个比较数相等") self.assertIsNone(None, msg="不为None") self.assertIsNotNone("123", msg="为None") # 断言"ab" 在"dafjabc"中 self.assertIn("ab", "dafjabc", msg="在字符串中") # 断言"abcd" 不在"dafjabc"中 self.assertNotIn("abcd", "dafjabc", msg="不字符串中") if __name__ == '__main__': unittest.main() |
5、参数化-parameterized
安装模块:pip install parameterized
使用
from parameterized import parameterized import unittest class T1(unittest.TestCase): def setUp(self): print("函数开始") @parameterized.expand([(1, 2, 3), (11, 22, 33), (111, 222, 333)]) def test(self, a, b, c): print(a, b, c) if __name__ == '__main__': unittest.main() |
结果
函数开始 1 2 3 函数开始 11 22 33 函数开始 111 222 333 ... ---------------------------------------------------------------------- Ran 3 tests in 0.000s OK |
6、 跳过-skip
import unittest class T1(unittest.TestCase): temp = 10 def test(self): print("test--->") @unittest.skip("暂时不执行该函数") def test1(self): print("test1--->") # True,则跳过,第一个参数bool值,第二个说明 @unittest.skipIf(temp > 2, "temp大于2时跳过") def test2(self): print("test2--->") # False 跳过 @unittest.skipUnless(temp > 2, "temp小于2时跳过") def test3(self): print("test3--->") if __name__ == '__main__': unittest.main() |
运行结果:
.ss. test---> ---------------------------------------------------------------------- Ran 4 tests in 0.000s test3---> OK (skipped=2) |
7、 生成HTML报告
报告下载地址-使用说明
复制BeautifulReport文件夹到 python安装目录的/site-packages/
scripts/test_01.py
import unittest class T1(unittest.TestCase): def test_01(self): print("我是T1类中的test_01") def test_02(self): print("我是T1类中的test_02") class T2(unittest.TestCase): def test_01(self): print("我是T2类中的test_01") |
1、初次使用
新建report文件夹
import unittest from BeautifulReport import BeautifulReport if __name__ == '__main__': suite = unittest.defaultTestLoader.discover(start_dir="./scripts",pattern="test*.py") result = BeautifulReport(suite) # filename -> 测试报告名称, 如果不指定默认文件名为report.html # description -> 测试报告用例名称展示 # log_path='.' -> log文件写入路径 result.report(filename="测试报告",description="测试deafult报告",log_path='report') |
运行结果:
2、添加用例描述-报错的信息点击用例展开即可查看
import unittest import time from BeautifulReport import BeautifulReport from selenium import webdriver class T3(unittest.TestCase): def test_01(self): """ 我是test_01函数 """ print("我是T3中的test_01函数") def test_02(self): """ 我是test_02函数 """ print("我是T3中的test_02函数") # 断言失败,信息收集在html的展开中 self.assertEqual(1,2) if __name__ == '__main__': suite = unittest.TestSuite() suite.addTest(T3("test_01")) suite.addTest(T3("test_02")) result = BeautifulReport(suite) result.report(filename="测试报告",description="测试deafult报告",log_path='report') |
运行结果:
3、断言失败-自动截图(前提实现save_img函数)
在当前目录创建img目录存储图片
当前目录report存储报告
import unittest from selenium import webdriver from BeautifulReport import BeautifulReport class T3(unittest.TestCase): """ 测试T3""" def save_img(self, img_name): """ 保存图片 """ self.driver.get_screenshot_as_file('{}/{}.png'.format("./img", img_name)) @BeautifulReport.add_test_img('百度首页') def test_01(self): """ 打开首页, 截图 """ self.driver = webdriver.Chrome() self.driver.get("http://www.baidu.com") # 断言失败 self.assertEqual(1,2) self.driver.quit() if __name__ == '__main__': suite = unittest.TestSuite() suite.addTest(T3("test_01")) result = BeautifulReport(suite) result.report(filename="测试报告", description="测试deafult报告", log_path='report') |
4、没有断言-需要添加图片-可以在函数中调用save_img
小Bug,如果只添加一个图片,则会发现测试报告中没有图片(所以在一个测试用例中添加两个图片以上)
import unittest from selenium import webdriver from BeautifulReport import BeautifulReport class T3(unittest.TestCase): def save_img(self, img_name): """ 保存图片 """ self.driver.get_screenshot_as_file('{}/{}.png'.format("./img", img_name)) @BeautifulReport.add_test_img('百度首页', "百度首页点击新闻按钮") def test_01(self): """ 打开首页截图,点击新闻链接截图 """ self.driver = webdriver.Chrome() self.driver.get("http://www.baidu.com") self.save_img('百度首页') self.driver.find_element_by_xpath("//*[@id='u1']/a[1]") self.save_img('百度首页点击新闻按钮') print('跳转与保存截图完成') self.driver.quit() if __name__ == '__main__': suite = unittest.TestSuite() suite.addTest(T3("test_01")) result = BeautifulReport(suite) result.report(filename="测试报告", description="测试deafult报告", log_path='report') |
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理