基于python+requests的简单接口测试
在进行接口测试时,我们可以使用已有的工具(如:jmeter)进行,也可以使用python+requests进行。以下为简单的接口测试模板:
一、提取常用变量,统一配置
新建一个config.py文件,用来存放统一变量
如:
1 # _*_ coding:;utf--8 _*_ 2 import json 3 4 #接口测试中,使用的头文件信息 5 headers={ 6 "Accept":"application/json", 7 "Connection":"keep-alive", 8 "Accept-Language":"zh-Hans-CN;q=1", 9 "Accept-Encoding":"gzip, deflate" 10 } 11 12 #测试地址:IP+端口 13 service="http://192.168.1.1:8080" 14 15 #读取测试用例文件 16 interfile=open("D:\\testcase\接口测试脚本-总接口.csv","r") 17 intercase=interfile.readlines() 18 interfile.close() 19 20 #读取测试结果文件,并保存结果 21 def resultmode(interresult): 22 testresult=open("D:\\testresult\\testresult.csv","a") 23 # interresult="测试结果" 24 testresult.write(interresult) 25 testresult.close()
二、提取requests的方法,方便调用
如:
1 #_*_ coding:utf-8 _*_ 2 import json 3 from Interface_test.config import service,headers,resultmode,intercase 4 import requests 5 import re,time 6 import types 7 8 9 def Interface_post(interface,paramter): 10 url = service + interface 11 # paramter = json.dumps(paramter) 12 try: 13 resp = requests.post(url, headers=headers, data=paramter,timeout=30) 14 resp.json() 15 return resp 16 except ValueError: 17 print("响应值不是json格式") 18 return resp 19 except ConnectionError: 20 print("网络异常") 21 return resp 22 except TimeoutError: 23 print("请求超时") 24 return resp 25 def Interface_get(interface,paramter): 26 url = service + interface 27 paramter = json.dumps(paramter) 28 29 resp = requests.get(url, headers=headers,timeout=1) 30 # print(resp.json()) 31 return resp
三、针对接口的测试
如:
1 # _*_ coding:utf-8 _*_ 2 3 import json 4 from Interface_test.config import service,headers,intercase,resultmode 5 from Interface_test.mode import Interface_post 6 import re,time 7 import requests 8 9 class interface_test(): 10 def __init__(self): 11 """init""" 12 13 if __name__=='__main__': 14 15 #输出接口测试执行的时间到结果文件 16 rtime=time.strftime("%Y-%m-%d %H-%M-%S", time.localtime()) 17 resultmode("\n"+"本次测试时间为:"+rtime+"\n") 18 19 #循环读取测试用例文件中的信息 20 for i in range(len(intercase)): 21 param=intercase[i].split(",") 22 23 ###赋值接口请求路径 24 inter = param[2] 25 26 ####赋值接口参数 27 para = (str(param[3])).strip() 28 29 ###发起请求 30 responses=Interface_post(inter,para) 31 # print(responses.encoding) 32 # print(responses.text) 33 34 # print(responses.cookies) 35 36 ###查看请求结果 37 #请求响应code 38 code=responses.status_code 39 # print(responses.status_code==requests.codes.ok) 40 # print(responses.raise_for_status()) 41 42 #判断请求结果 43 if code==200: 44 ##当请求成功时,获取响应数据 45 results = json.loads((responses.content).decode()) 46 ##在响应数据中提取result的值 47 bool = results.get("result") 48 # body=results.get("body") 49 ##判断result值:为1时成功,输出信息 50 if bool=='1': 51 ###将响应结果输出到文件 52 resultstring=param[0]+","+param[1]+","+str(code)+","+"请求成功,响应成功"+"\n" 53 resultmode(resultstring) 54 ##判断result结果:为0时,表示请求发送成功,但是响应的数据有问题,返回响应的error信息 55 elif bool=='0': 56 errorstring=results["body"]["errorDescription"] 57 resultstring=param[0]+","+param[1]+","+str(code)+","+"请求成功,响应报错"+\ 58 ","+errorstring+"\n" 59 resultmode(resultstring) 60 else: 61 resultstring = param[0] + "," +param[1]+","+ str(code)+ ","+"请求响应失败"+"\n" 62 resultmode(resultstring) 63 #当响应code不为200时,输出响应code 64 else: 65 resultstring = param[0] + "," +param[1]+","+ str(code) + ","+"请求响应失败"+"\n" 66 resultmode(resultstring)
四、涉及的知识点说明
1、requests
地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html
2、文件操作
地址:https://www.cnblogs.com/smallstone2018/p/9841957.html
3、Json
使用json前,需要先导入包:import json
json与python的字典之间的转换
json模块有两个方法:
loads():将json数据转换成disc数据;
dumps():将dict数据转换成json数据;
load():读取json文件数据,转换成dict数据;
dump():将dict数据转换成json数据后 写入json文件;