• 接口自动化的本质是自动发送请求给服务器,服务器返回结果,我们验证数据是否符合预期。
  • 我们要做的事情就是
    1. 发送请求给服务器;
  • 2.检查服务器返回的结果是否正确;
  • 现在根据这两个需求我们做的事情
  • 1.使用requests帮助发送请求给服务器
  • 2.拿到服务器的返回结果之后使用python的assert添加断言,验证结果是否符合预期结果。
  • 这两个是最核心的东西, 下面的一切操作都是围绕这连个核心。
  • 封装基础类:
  • 我们的API 主要用get 和post 请求,在封装时主要封装get 和 post 请求即可。
  • sdk.py
  • import requests
  • class Client:
  • def init(self):
    1. self.base_url = '[http://39.107.96.138:3000/api/v1](http://39.107.96.138:3000/api/v1)'
  • def do_request(self,url:str, method:str,args,params=None, data=None,json=None, *kwargs):
        url = self.base_url+url<br />
        method = method.lower()<br />
        if method == 'get':<br />
            return requests.get(url,params,**kwargs)<br />
        elif method == 'post':<br />
            return requests.post(url,data=data,json=json,**kwargs)
    
  • 封装数据
  • 接口测试数据主要放在yaml文件中。
  • data.yml
    • topics1:
      url: /topics
      method: get
      param:
      page: 1
      limit: 1
      
    • topics2:
      url: /topics
      method: get
      param:
      page: 1
      limit: 2
      
  • 定义case
  • 请求的参数放在yml文件中维护,有多少条数据应该为多少条case。借助pytest的参数化,从文件读取数据传给参数化,实现数据驱动。
  • testcase.py
  • import pytest
    from sdk import Client
    import yaml
  • f = open(‘data.yml’)
    data = yaml.safe_load_all(f)
    @pytest.mark.parametrize(‘case’,next(data))
    def test_case(case):
    for k, v in case.items():<br />
        client = Client()<br />
        res = client.do_request(url=v['url'], method=v['method'], params=v['param'])<br />
        print(res.status_code, res.content)
    
  • 运行
  • 执行pytest 运行命令
  • pytest tescase.py
  • image.png
  • 可以看到自动生成2条case,执行完毕。
  • Python 习题整理
    1. 给定下列数组,请按照数据长度从小到大进行排序;
  • l = [‘zyy’,’yx’,’bbbb’,’aaa’]
  • 两种方式

    l.sort(key=len)

    l.sort(key= lambda a: len(a))
    print(l)
    1. 给定下列数据,求出A,B中共同的元素;
  • a = [‘zhangsan’,’lisi’,’wangwu’]
    b = [‘zhangsan’,’mazi’,’ergouzi’]
  • 转换为集合之后求交集。

    print( set(a) & set(b))
    1. 执行下面代码,请问会打印出什么内容?
  • def f(a,L=[]):
    L.append(a)<br />
    print(L)
    
  • f(1)
    f(2)
    f(3)
  • [1]
    [1, 2]
    [1, 2, 3]