python+untitest+request实现接口自动化测试
python+untitest+request实现接口自动化测试
目录结构
- report
- test_case
- run_test_case.py
实现步骤描述
- 在test_case中,使用untitest把每个接口写成测试脚本,每个接口写一个测试脚本,但是包含多个测试用例(用例名称以test开头)
- 使用discover()方法,自动匹配查找测试用例,将所有测试用例组装到测试套件中,然后通过run执行discover
- 使用HTMLTestRunner生成测试报告
post接口
#coding:utf-8
import urllib
import requests
import json
import unittest
from login import get_login
class post_request(unittest.TestCase):
u'''01:正常登录 02:密码错误 03:登录账号密码错误'''
def setUp(self):
self.post_url = ''
self.header = {"Accept":
"Accept - Encoding":
"Content-Type":
"Cookie":
}
def test_post_01(self):
u'''注释不显示'''
# u'''登录测试-正向,账号:wangm/密码:1234567'''
url = self.post_url
header = self.header
#data = {"userName": "wangm", "passWord":"1234567"}
data = {"username" : "wangm",
"password" : 1234567,
"token":get_login()}
#将data序列化为json格式数据,传递给data参数
r = requests.post(url,data=data , headers = header)
print(r.status_code)
print(r.text)
#result = r.json()['code']#获取状态码
#print(result)
#断言
#self.assertEqual(200,result)
self.assertIn('message',r.text)
#self.assertTrue('success' in r.text)
def test_post_02(self):
u'''登陆测试-密码错误,账号:wangm/密码L23'''
url = self.post_url
header = self.header
data = {"username": "wangm",
"password": 123,
"token":get_login()}
r = requests.post(url,data=data, headers = header)
print(r.status_code)
print(r.text)
def test_post_03(self):
u'''登陆测试-密码错误,账号:wangm/密码L23'''
url = self.post_url
header = self.header
data = {"username": "wang",
"password": 123,
"token":get_login()}
r = requests.post(url,data=data, headers = header)
print(r.status_code)
print(r.text)
def tearDown(self):
pass
if __name__ =='__main__':
unittest.main()
#data=json.dumps(data)
get接口
#coding:utf-8
import requests
import unittest
from login import get_login
class get_request(unittest.TestCase):
def setUp(self):
self.get_url = " "
self.header = {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"x-token": get_login()
}
def test_get_01(self):
u'''描述'''
url = self.get_url
header = self.header
data ={"page":1,
"size":12,
"keyword":"",
"token":get_login()
}
r = requests.get(url,data=data,headers=header)
print( r.text)
def tearDown(self):
pass
if __name__ == '__main__':
unittest.main()
接口间token调用
import requests
import json
def get_login():
url = ""
data = {
"username" :"wangm",
"password" :"1234567"
}
headers = {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
}
res = requests.post(url=url,data=data,headers=headers)
return (res.json()["data"]["token"])
token = str(get_login())
#print(token,"确认token成功返回")
print(token)
#从响应结果中获取token值
下载
#coding:utf-8
#只要fidder开着,涉及SSL安全验证问题,运行失败,关闭fidder后,运行成功
import requests
import unittest
from login import get_login
class get_request(unittest.TestCase):
def setUp(self):
self.get_url = ''
self.header = {
"Cookie":
"Accept":
"Connection":
"Accept-Language":
"token":get_login()
}
def test_get_01(self):
url = self.get_url
header = self.header
#data = {
#}
r = requests.get(url=url,headers=header)
#print(r.text)
#open打开excel文件,保存为后缀为xls的文件
fp = open("vehicleModel.xlsx","wb") #"w":写入 "b":二进制
fp.write(r.content)
fp.close()
#print()
def tearDown(self):
pass
if __name__ == '__main__':
unittest.main()
上传
#coding:utf-8
import requests
import unittest
from login import get_login
class post_request(unittest.TestCase):
def setUp(self):
self.url = ''
self.header = {
#"Cookie":
"x - token":
"Content - Type":
}
def test_post_01(self):
url = self.url
headers = self.header
data = {
"Content - Disposition": "form - data",
"name": "file",
"filename": "vehicleModel.xlsx",
"Content - Type": "application / vnd.openxmlformats - officedocument.spreadsheetml.sheet",
"token": get_login(),
}
files = {"file": ("vehicleModel.xlsx", open("C:\\Users\\Kst\\Desktop\\vehicleModel.xlsx", "rb"), "text/plain", {}),
#cookies=get_login()
}
r = requests.post(url=url,headers=headers,data=data,files=files)
print(r.status_code)
print(r.text)
def tearDown(self):
pass
if __name__ == '__main__':
unittest.main()
HTMLTestRunner
将HTMLTestRunner.py文件放入Lib下,不同的HTMLTestRunner会产生不同样式的测试报告
run
# coding=utf-8
#https://www.jb51.net/article/151626.htm
#不发送邮件
import unittest
import HTMLTestRunner
import time
# 相对路径
test_dir ='./test_case'
test_dir1 ='./report'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
# 定义带有当前测试时间的报告,防止前一次报告被覆盖
now = time.strftime("%Y-%m-%d %H_%M_%S")
filename = test_dir1 + '/' + now + 'result.html'
# 二进制打开,准备写入文件
fp = open(filename, 'wb')
# 定义测试报告
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'接口自动化测试报告', description=u'环境:Windows 10 浏览器:chrome 执行人:汪敏 用例执行情况')
runner.run(discover)#discover加载测试用例