api课堂笔记_day04

  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 接口自动化的框架搭建过吗?是你自己搭建的吗?怎么搭建的呢?
原文地址:https://www.cnblogs.com/zhang-ping1205/p/14699975.html