unittest

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
原文地址:https://www.cnblogs.com/whcp855/p/13178597.html