接口手工测试


点击这里,边看视频讲解,边学习以下内容

前面让大家根据 白月SMS系统的 接口文档, 练习写接口测试用例,

现在我们根据下面的用例文档, 先进行 手工测试

用例文档点击这里下载

我们自己开发测试工具, 使用Python和requests库, 发送和接收 测试用例中 的API接口消息。

范例1


先来看 登录 API 的用例 API-0001

首先,这个用例有个前置条件,也就是这个用例执行所需要的数据环境:

系统中:没有客户 没有药品 没有订单

手工测试的时候,怎么保证用例的数据环境呢?

测试者 人工检查 ,如果有客户、药品、订单,将其删除即可。

如果测试的时候,系统前端已经开发完毕,在前端删除。否则可以通过 API 删除接口删除。

尽量不要在数据库中直接删除数据。



接下来,用例要求 发送一个 登录请求,HTTP消息体填入正确的管理员用户名、密码。

根据接口文档对登录API消息的描述,结合前面学过的 requests库,我们可以很方便的写下如下代码

import requests

# 打印HTTP响应消息的函数
def printResponse(response):
    print('\n\n-------- HTTP response * begin -------')
    print(response.status_code)

    for k, v in response.headers.items():
        print(f'{k}: {v}')

    print('')

    print(response.content.decode('utf8'))
    print('-------- HTTP response * end -------\n\n')


response = requests.post("http://127.0.0.1/api/mgr/signin",
                         data={
                             'username': 'byhy',
                             'password': '88888888'
                         }
                         )

printResponse(response)

运行结果为

-------- HTTP response * begin -------
200
Date: Thu, 26 Sep 2019 03:09:38 GMT
Server: WSGIServer/0.2 CPython/3.7.3
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
Content-Length: 10
Vary: Cookie
Set-Cookie: sessionid=2lixzp270i2q8um3thixexjdedj0puyz; expires=Thu, 10 Oct 2019 03:09:38 GMT; HttpOnly; Max-Age=1209600; Path=/; SameSite=Lax

{"ret": 0}
-------- HTTP response * end -------

我们发现打印出来的 状态码,消息头中的contenttype,消息体 都符合预期,这个用例就可以填入测试通过了。

范例2


点击这里,边看视频讲解,边学习以下内容

我们再来看 用例 API-0102

根据接口文档对列出客户API消息的描述,结合前面学过的 requests库,我们可以很方便的写下如下代码

import requests

# 打印HTTP响应消息的函数
def printResponse(response):
    print('\n\n-------- HTTP response * begin -------')
    print(response.status_code)

    for k, v in response.headers.items():
        print(f'{k}: {v}')

    print('')

    print(response.content.decode('utf8'))
    print('-------- HTTP response * end -------\n\n')


# 创建 Session 对象
s = requests.Session()

# 通过 Session 对象 发送请求
response = s.post("http://127.0.0.1/api/mgr/signin",
       data={
           'username': 'byhy',
           'password': '88888888'
       })

# 通过 Session 对象 发送请求
response = s.get("http://127.0.0.1/api/mgr/customers",
      params={
          'action'    :  'list_customer',
          'pagesize'  :  10,
          'pagenum'   :  1,
          'keywords'  :  '',
      })

printResponse(response)

运行结果为

-------- HTTP response * begin -------
200
Date: Thu, 26 Sep 2019 03:11:29 GMT
Server: WSGIServer/0.2 CPython/3.7.3
Content-Type: application/json
X-Frame-Options: SAMEORIGIN
Content-Length: 37
Vary: Cookie

{"ret": 0, "retlist": [], "total": 0}
-------- HTTP response * end -------

和预期一致,也可以给该用例写上测试通过。


发送接收API消息封装到库中


点击这里,边看视频讲解,边学习以下内容

我们还有很多测试用例要完成,还需要写很多的发送接收的代码。

我们思考一下,可以发现,可以把 发送接收API消息封装到库中,这样可以使我们的测试代码更加简洁。

比如,我们可以创建一个 webapi.py的库

import requests
from pprint import  pprint


class APIMgr:

    def _printResponse(self,response):
        print('\n\n-------- HTTP response * begin -------')
        print(response.status_code)

        for k,v in response.headers.items():
            print(f'{k}: {v}')

        print('')

        print(response.content.decode('utf8'))
        print('-------- HTTP response * end -------\n\n')

    def mgr_login(self,username,password):
        self.s = requests.Session()
        response = self.s.post("http://127.0.0.1/api/mgr/signin",
                                 data={
                                     'username': username,
                                     'password': password
                                 }
                                 )

        self._printResponse(response)
        return response


    def customer_list(self,pagesize,pagenumber,keywords):
        response = self.s.get("http://127.0.0.1/api/mgr/customers",
              params={
                  'action' :'list_customer',
                  'pagesize' :pagesize,
                  'pagenum' :pagenumber,
                  'keywords' :keywords,
              })

        self._printResponse(response)
        return response

这样,我们就可以在测试代码文件中,如下方式调用库

from webapi import APIMgr
am = APIMgr()
am.mgr_login('byhy','88888888')
am.customer_list(1,10,'').

是不是要方便很多呢?


扫码分享给朋友,一起学更有动力哦




课后练习

题目1

根据教程

API-0151  
API-0152  
API-0153 
API-0201  
API-0202  
API-0203
API-0251  
API-0252