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:回答]