亲测们,项目一开始直接使用jmeter 实现了接口自动化的测试需求(后面有空的话给亲们解说),然而计划赶不上变化啊,放着好好地方便不用,非得来点硬的,用python代码实现,得唻,搞就搞,谁怕谁。
下面先介绍下我的目录层级结构,比较简单,没有大的项目那么复杂。
common里面放了一些自己封装的函数,和有一些常用的变量;token文件最主要登陆的时候保存了下参数,用来传递德纳,知识有限,还没有想到别的好方法;
login里面就是测试用例;
package 里面放了一个第三方模块HTML_TestRunner;
run里面放了执行文件和一个生成报告的文件;
如果不想看简介,可以以自己看代码的啦,https://github.com/Jinfei920029/Interface_test_sfm1里面的InterfaceTest,当然了里面还有别的项目,包涵包涵.....
直接上代码罗
https://github.com/Jinfei920029/Interface_test_sfm1 里面的InterfaceTest
1.第一个case其实很简单:获取token后保存文件里面,其他的请求需要token的话直接来拿,我就直接截图了,代码到项目InterfaceTest里面下载,都是开源可看的
import requests
import unittest
from testPlan.common.commonFun import Login_Element,Fun
class MyTest(unittest.TestCase): #封装测试环境的初始化
def setUp(self):
print("start test")
pass
def test_01_Login1(self):
#开始第一个get请求获取sessionid和sessiondata
self.url1 = Login_Element.login_url1
params1 = Login_Element.params1
self.params1 = params1
response1 = requests.get(url=self.url1, params=self.params1)
print("status_code1:" + str(response1.status_code))
sessionid = Fun.getSessionId(response1.text)
self.sessionid = sessionid
sessiondata = Fun.getSessionData(response1.text)
self.sessiondata = sessiondata
#开始第二个post请求
self.url2 = Login_Element.login_url2
message2 = {"sessionId": sessionid, "sessionData": sessiondata}
message2_2 = Fun.merge_Two_Dicts(Login_Element.message2, message2)
header2 = Login_Element.header2
print(message2_2)
print(type(message2_2))
response2 = requests.post(url=self.url2, data=message2_2, headers=header2)
print("status_code2:" + str(response2.status_code))
#获取token请求
self.url3 = Login_Element.login_url3
message3 = {"sessionId": sessionid}
header3 = Login_Element.header3
response3 = requests.post(url=self.url3, data=message3, headers=header3)
print("status_code3:" + str(response3.status_code))
print("token:" + response3.text)
token_info = Fun.re_write(response3.text)
Fun.save_to_jsonfile('../common/token.json', token_info)
def tearDown(self):
print("end test")
pass
if __name__=="__main__":
unittest.main()
2.run脚本是用来运行的,加载case一起执行,然后输出到html报告里面去,注意case层级目录不要用中文,不要有空格;
import unittest,time
import os
import sys
sys.path.append(os.path.abspath(os.path.dirname(os.getcwd())))
from testPlan.packages.HTMLTestRunner import HTMLTestRunner
test_dir = '../case'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test*.py')
if __name__ == '__main__':
now = time.strftime("%Y-%M-%D %H_%M_%S")
filename = 'result.html'
fp = open(filename,'wb')
runner = HTMLTestRunner(stream=fp,
title='Test report',
description='用例执行情况:')
runner.run(discover)
fp.close()