1 # 首先根据接口的请求:确认使用requests库 2 终端下安装:pip install requests 3 # 对于零散的代码进行类的封装: my_requests.py 4 import requests 5 6 7 class MyRequests: 8 9 # 初始化方法 10 def __init__(self): 11 # 请求头 12 self.headers = {"X-Lemonban-Media-Type": "lemonban.v2"} 13 14 # 属性 15 # 方法 post/put.. json=XXX , get.. params=XXX 16 def send_requests(self,method,url, data,token=None): 17 # 处理请求头 18 self.__deal_header(token) 19 # 调用requests的方法去发起一个请求。并得到响应结果 20 if method.upper() == "GET": 21 resp = requests.request(method, url, params=data, headers=self.headers) 22 else: 23 resp = requests.request(method, url, json=data, headers=self.headers) 24 return resp 25 26 def __deal_header(self,token=None): 27 if token: 28 self.headers["Authorization"] = "Bearer {}".format(token) 29 30 if __name__ == '__main__': 31 mr = MyRequests() 32 url = "http://api.lemonban.com/futureloan/member/register" 33 req_data = { 34 "mobile_phone": "18610100022", 35 "pwd": "123456789", 36 "reg_name": "py37小简" 37 } 38 method = "post" 39 resp = mr.send_requests(method,url,req_data) 40 print(resp.json()) 41 42 # url地址 43 url = "http://api.lemonban.com/futureloan/member/login" 44 # 请求类型:post 45 46 # 请求体 47 req_data = { 48 "mobile_phone": "18610100020", 49 "pwd": "123456789" 50 } 51 method = "post" 52 resp = mr.send_requests(method,url, req_data) 53 print(resp.json()) 54 55 # 提取出来,给到下一接口去作为请求 56 json_res = resp.json() 57 token = json_res["data"]["token_info"]["token"] 58 member_id = json_res["data"]["id"] 59 60 url = "http://api.lemonban.com/futureloan/member/recharge" 61 # 请求数据 62 req_data = { 63 "member_id": member_id, 64 "amount": 1000 65 } 66 method = "post" 67 resp = mr.send_requests(method,url, req_data,token=token) 68 print(resp.josn()) 69 # 数据驱动应用 70 DDT Data driven test 71 python 有一个第三方库:ddt 用在unittest框架上 72 @ddt 73 pytest测试框架:本身就有驱动的实现 @pytest.markparametrized(...) 74 使用场景:有很多组数据,走的同一个流程 75 1、你的流程是什么? 76 2、你有多少组数据 77 # 案例: test_ddt.py 78 from py_37.Py_Api接口自动化.class_api04.my_requests import MyRequests 79 import pytest 80 81 82 datas = [ 83 {"method": "post" , 84 "url": "http://api.lemonban.com/futureloan/member/register", 85 "req_data": {"mobile_phone": "18610100022","pwd": "123456789","reg_name": "py37小简"}}, 86 {"method": "post", 87 "url": "http://api.lemonban.com/futureloan/member/login", 88 "req_data":{"mobile_phone": "18610100022","pwd": "123456789"}}, 89 {"method": "post", 90 "url": "http://api.lemonban.com/futureloan/member/recharge", 91 "req_data": {"member_id": None,"amount": 1000}} 92 ] 93 94 95 mr = MyRequests() 96 97 # 一组就是一条用例 98 # 某一组即便运行失败了,下一组仍然会运行。 99 @pytest.mark.parametrize("item", datas) 100 def test_api1(item): 101 resp = mr.send_requests(item["method"], item["url"], item["req_data"]) 102 print(resp.json()) 103 assert True # 运行通过 False 运行失败 104 105 106 # def test_api1(): 107 # for item in datas: 108 # resp = mr.send_requests(item["method"], item["url"], item["req_data"]) 109 # print(resp.json()) 110 # assert False 111 112 113 114 # def test_ap2(): 115 # resp = mr.send_requests(datas[1]["method"], datas[1]["url"], datas[1]["req_data"]) 116 # print(resp.json()) 117 # 118 # def test_api3(): 119 # resp = mr.send_requests(datas[2]["method"], datas[2]["url"], datas[2]["req_data"]) 120 121 # 接口数据的存储 122 1、excle表格-配置json路径 123 2、json文件 -请求参数比较多,写在josn文件里面 124 3、yaml文件 -httprunner3.0 125 4、数据库 -创建表格 126 # 根据业务的核心走 -用户使用率最高的地方 127 2、用例的优先级 - 常用的功能场景/必填参数 128 3、参数的格式有效性 -后端没有做校验的情况 129 4、正常用例先设计,异常用例设计(全面覆盖) 130 正式设计用例的时候;节后postman/jmeter这样的接口测试工具调试接口 131 设计不同的测试数据,发起请求,查看响应结果与设计是否一致 132 需要手工测试验证通过 ---在一定稳定的基础上;在介入接口自动化测试(用于回归测试) 133 迭代的价值 --自动执行 134 用例设计上花的时间(某个接口) 135 首先是否了解接口的业务,系统的业务。接口时候有规范的文档,需要考虑 136 接口的熟悉程度有多少?接口是否复杂,接口涉及的业务是否复杂 -梳理逻辑/前置准备工作多吗?参数的组合多不多? 137 建议先看下自己项目的接口,去设计接口测试用例 138 接口也是一个孰能生巧的过程 139 自动化覆盖怎么样?怎么回答? 140 覆盖率:功能上/手工测试用例覆盖率 30-90%之间 141 1、项目上做了多久的接口自动化? 142 2、系统有多大,业务是否复杂 --结合项目业务来描述? 143 3、接口用例设计有多少条?怎么维护的? 144 #用例覆盖的的时候,遇到什么困难,以及解决方法? 145 举例说明你在业务上遇到的困难及时处理方法? 146 接口自动化的框架搭建过吗?是你自己搭建的吗?怎么搭建的呢?