1、用一段代码测试另一段代码,基本写法;
import unittest from unittest import TestCase #写一个待测函数 def add(a,b): return a+b class AddTest(unittest.TestCase): #继承 def test_add_normal(self): #以test开头 result = add(1,2) #调用 self.assertEqual(3,result) #断言 def test_add_error(self): er = 0 result= add(1,2) self.assertEqual(er,result,msg="'预期结果%s,实际结果%s' %(result,er)") #执行第一种方式:运行当前python文件下所有以test开头的的所有用例 unittest.main() #执行第二种方式-执行单条测试用例 suite = unittest.TestSuite() suite.addTest(AddTest('test_add_normal')) #执行第二种方式-执行所有测试用例 suite = unittest.makeSuite(AddTest) #执行 runner = unittest.TextTestRunner() runner.run(suite)
2、生成测试报告,用HTMLTestRunner;
import HTMLTestRunner
suite = unittest.makeSuite(AddTest) runner = unittest.TextTestRunner() f = open('测试报告1.html','wb') runner = HTMLTestRunner.HTMLTestRunner(f,title='测试报告1',description='add函数测试报告') runner.run(suite) f.close()
3、生成测试报告,用nnreport,nnreport是牛牛在BeautifulReport模块的基础上改进的
import unittest from unittest import TestCase import nnreport #写一个待测函数 def add(a,b): return a+b class AddTest(unittest.TestCase): #继承 def test_add_normal(self):#以test开头 '''正常情况''' #用例描述,会提现在测试报告上 result = add(1,2) #调用 self.assertEqual(3,result) #断言 def test_add_error(self): '''异常情况''' er = 0 result= add(1,2) self.assertEqual(er,result,msg="'预期结果%s,实际结果%s' %(result,er)") suite = unittest.makeSuite(AddTest) runner = nnreport.BeautifulReport(suite) runner.report(description='测试报告2',filename='add测试报告',log_path=r'C:UserslenovoDesktop')
4、参数化
import unittest import requests import os import parameterized class GetData: #从文件中读取参数 @staticmethod def read_data_to_file(filename): data = [] if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as fr: for line in fr: d1 = line.strip().split(',') #每行分隔完之后变成一个数组 data.append(d1) else: raise FileNotFoundError('参数化文件找不到') return data class Req_test: url = 'http://api.nnzhp.cn/api/user/stu_info' def test_singel(self,name,age): #直接传参 data = {'stu_name':name,'age':age} req = requests.get(self.url,data) return req.json() @parameterized.parameterized.expand( #参数以列表的方式传入 [ ['xiaohei',10], ['xiaobai',15] ] ) def test_more(self, name, age): # 从列表中循环读取参数传入 data = {'stu_name': name, 'age': age} req = requests.get(self.url, data) return req.json() @parameterized.parameterized.expand(GetData.read_data_to_file('stu_info.txt')) #从文件中读取 def test_more(self, name, age): data = {'stu_name': name, 'age': age} req = requests.get(self.url, data) return req.json()
5、查找测试用例
import unittest suite = unittest.defaultTestLoader.discover('cases','*.py') # *查找cases下所有的python文件作为测试用例执行,默认查找以test开头的
6、TestCase中测试用例执行顺序:
import unittest
class AddTest(unittest.TestCase): def setUp(self) -> None: #每条用例运行前都会执行 print('setup1') def tearDown(self) -> None: #每条用例执行后都会执行(例如清缓存) print('teardown1') @classmethod #最先开始执行 def setUpClass(cls) -> None: print('setup2') @classmethod #最后执行 def tearDownClass(cls) -> None: print('teardown2')
###普通以test开头的方法,默认是根据ASCII码的顺序加载测试用例,即按名称排序:数字与字母的顺序为:0-9,A-Z,a-z def test_a(self): pass def test_b(self): pass