zoukankan      html  css  js  c++  java
  • 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 接口自动化的框架搭建过吗?是你自己搭建的吗?怎么搭建的呢?
  • 相关阅读:
    网页信息抓取 Jsoup的不足之处 httpunit
    spring boot @ConfigurationProperties
    git冲突解决方案 Intellij IDEA
    HTTP 和 Socket 区别
    java.lang.reflect.Method
    dubbo hessian+dubbo协议
    4、注解反射生成SQL语句
    3、解析注解
    2、自定义注解
    1、JDK自带注解
  • 原文地址:https://www.cnblogs.com/zhang-ping1205/p/14699975.html
Copyright © 2011-2022 走看看