unittest和request使用(断言,生成HTML测试报告)
Unittest介绍
1.Unittest组成部分
UnitTest是python的自动化测试框架,Unittest框架主要包含以下部分:
- TestCase(测试用例)
- TestSuite(测试套件,把多个TestCase集成到一个测试TestSuite)
- TestRunner(执行测试用例)
- TestLoader(自动从代码中加载多个测试用例TestCase)
- Fixture(UnitTest特性)
(2)为什么使用Unitttest框架
- 能够组织多个用例去执行
- 提供丰富的断言方法
- 能够生成测试报告(由于生成的测试报告简陋,我们选择其他插件实现)
unittest初级
import unittest
def my_sum(a, b):
a += 1
b += 2
return a + b
class TestSum(unittest.TestCase):
def test_01(self):
print(my_sum(2, 1))
def test_02(self):
print(my_sum(-1, 1))
def test_03(self):
print(my_sum(0, 1))
def test_04(self):
print(my_sum(1, -4))
# 将测试用例添加到套件里
# 生成套件对象
suite = unittest.TestSuite()
# 一一添加测试用例到测试套件里
suite.addTest(TestSum("test_01"))
suite.addTest(TestSum("test_02"))
# 执行suite对象中的用例
runner = unittest.TextTestRunner()
runner.run(suite)
import time
if __name__ == ‘__main__‘:
time.sleep(3)
TestSum()
(二)高级
import unittest from request_test.test04 import TestSum1 from request_test.test04 import TestSum2 def my(a, b): a += 1 b += 2 return a + b # 首先生成测试用例 class TestSum(unittest.TestCase): def test01(self): number=(my(2, 1)) self.assertEqual(number,6) def test02(self): number=(my(-1, 1)) self.assertEqual(number, 3) def test03(self): number=(my(0, 1)) self.assertEqual(number, 4) def test04(self): number=(my(1, -4)) self.assertEqual(number, 0) # 将测试用例添加到套件里 # 生成套件对象 suite = unittest.TestSuite() # 一一添加测试用例到测试套件里 suite.addTest(TestSum("test01")) suite.addTest(TestSum("test02")) suite.addTest(TestSum("test03")) suite.addTest(TestSum("test04")) # 一次行添加一个类里面的所有的用例 # suite.addTest(unittest.makeSuite(TestSum1)) # suite.addTest(unittest.makeSuite(TestSum2)) # 批量添加一个py文件里面所有的用例 # suite = unittest.TestLoader().discover(‘./‘,‘test04.py‘) # 执行suite对象中的用例 runner = unittest.TextTestRunner() runner.run(suite)
如图:# 一次行添加一个类里面的所有的用例
# suite.addTest(unittest.makeSuite(TestSum1)) # suite.addTest(unittest.makeSuite(TestSum2))
如上图:批量添加一个py文件里面所有的用例
# suite = unittest.TestLoader().discover(‘./‘,‘test04.py‘)
(三)request和unittest自动化校验
首先创建一个yun.test.py和yun_run.py文件
yun.test.py中有两种不同的添加数据方法
import json, unittest, parameterized, requests def yun_login(username, password): # 请求的url url = "http://yun.zenm.vip/iot/account/login/" data = { "username": username, "password": password, } json_data = json.dumps(data) header = { ‘Content-Type‘: ‘application/json‘ } res = requests.post(url=url, data=json_data, headers=header) json_data = res.json() return json_data # 为当前的接口写测试用例 class Yun_test(unittest.TestCase): def test_01(self): # 准备请求的数据和断言数据 username = ‘NestleWMS‘ password = ‘NestleWMS‘ code = 200 # 获取requests请求以后的json数据 json_data = yun_login(username, password) self.assertEqual(int(json_data["result"]), code) # 错误的用户名 def test_02(self): # 准备请求的数据和断言数据 username = ‘NestleWMS1‘ password = ‘NestleWMS‘ code = 5 # 获取requests请求以后的json数据 json_data = yun_login(username, password) self.assertEqual(int(json_data["result"]), code) # 错误的密码 def test_03(self): # 准备请求的数据和断言数据 username = ‘NestleWMS‘ password = ‘NestleWMS2‘ code = 4 # 获取requests请求以后的json数据 json_data = yun_login(username, password) self.assertEqual(int(json_data["result"]), code)
#批量测
# class Yun_test2(unittest.TestCase):
# @parameterized.parameterized.expand(
# [(‘NestleWMS‘, ‘NestleWMS‘, 200), (‘NestleWMS1‘, ‘NestleWMS‘, 5), (‘NestleWMS‘, ‘NestleWMS2‘, 4)])
# def test04(self, username, password, code):
# # 获取requests请求以后的json数据
# json_data = yun_login(username, password, code)
# self.assertEqual(int(json_data["result"]), code)
如图:
第二步在yun_run.py中写入以下代码
import unittest from request_test.HTMLTestRunner import HTMLTestRunner from request_test.yun_test import Yun_test from request_test.yun_test import Yun_test2 # 加载到case套件里 suite = unittest.TestSuite() # suite.addTest(unittest.makeSuite(Yun_test)) suite.addTest(unittest.makeSuite(Yun_test2)) # 执行套件,生成测试报告 f = open(‘yun_run_test2.html‘, ‘wb‘) runner = HTMLTestRunner(stream=f, title=‘云系统登录测试报告‘, description=‘Chrome 浏览器‘) runner.run(suite) f.close()
随后生成云系统登录测试报告
yun_run_test.html(单个添加)
yun_run_test2.html(批量添加)
如图:
unittest和request使用(断言,生成HTML测试报告)
[db:回答]