一、选取请求方式
import requests
class HttpRequest():
def http_request(self, url, data, method, cookie=None):
if method.lower() == "get":
# verify=False忽略证书 ssl
res = requests.get(url, data, cookies=cookie, verify=False)
return res
elif method.lower() == "post":
res = requests.post(url, data, cookies=cookie, verify=False)
return res # 返回的是一个消息实体
else:
raise Exception('不支持的请求')
二、反射函数
class GetData:
Cookie = '小郭'
setattr(GetData,'Cookie','小黄')
print(GetData.Cookie)
三、单元测试用例
import unittest
from testcase_01.class_02_02 import HttpRequest
from testcase_01.class_02_04 import GetData
# 登录接口
class TestHttp(unittest.TestCase):
def setUp(self):
print("我已经开始测试用例了")
#超继承
def __init__(self,methodName,url,data,method,expected):#通过初始化函数传参
super(TestHttp,self).__init__(methodName)#保留父类的方法
self.url = url
self.data = data
self.method = method
self.expected = expected
def test_api(self):
res = HttpRequest().http_request(self.url, self.data, self.method,getattr(GetData,'Cookie'))
if res.cookies:
setattr(GetData, 'Cookie', 'res.cookies')
try:
self.assertEqual(self.expected, res.json()['code'])
except Exception as e:
print("test_api's error is {0}".format(e))
raise e
print(res.json())
四、传参+输出测试报告
# ..成功 F失败 1代码错误
import unittest
import HTMLTestRunner
from testcase_01 import class_02_01 #导入模块名
import time
import os
from testcase_01.class_02_01 import TestHttp #具体到类名
#列表里面嵌套字典
test_data = [
{"url":'登录的url',"data": {'正常登录的参数值'}, "expected": '10001','method':'get'},
{"url":'登录的url',"data": {"错误登录的参数值"}, "expected": '20111','method':'get'},
{"url":'充值的url',"data": {"正确的充值参数值"}, "expected": '10001','method':'post'},
{"url":'充值的url',"data": {"错误的充值参数值"}, "expected": '20117','method':'post'}
]
suite = unittest.TestSuite() # 存储用例
for item in test_data:#遍历是为了创建实例
suite.addTest(TestHttp('test_api',item['url'],item['data'],item['excepted'],item['method']))#实例方式去加载用例
if __name__ == "__main__":
time1 = time.strftime("%Y-%m-%d %H-%M-%S")
name1 = time1 + "report.html"
with open(name1, 'wb') as file:
runner = HTMLTestRunner.HTMLTestRunner(
stream=file,
title="单元测试报告",
description="测试用例执行统计1",
verbosity=2
)
runner.run(suite)