Python接口测试实战6 - 序列化与反序列化

理解什么是序列化

在我面试有接口测试经验的候选人的时候,经常会问一个问题:如何对返回的响应结果(假设json格式)中的字段值进行断言?我一般得到的答复是通过正则表达式,有一部分候选人会说使用JSON Path,这就是让我非常困惑的一个地方:好像大部分测试人员都不知道序列化反序列化这种重要的基础概念。

我以一个例子来展开:

class Student:

    def __init__(self, name, age, *courses):
        self.name = name
        self.age = age
        self.courses = courses

mike = Student("Mike Hsu", 20, "English", "Chinese")

Read More

Python接口测试实战5 - 面向服务封装

上一篇我们封装了def list_issues()接口,在这一节正式开讲前,我们以同样的方法封装另外个接口:

# https://www.redmine.org/projects/redmine/wiki/Rest_Issues#Listing-issues
def list_issues(api_key, **kwargs):
  """按条件查询issue"""
  return requests.get("http://redmine.xuh.me/issues.json", params=kwargs, headers={"X-Redmine-API-Key": api_key}).text


# https://www.redmine.org/projects/redmine/wiki/Rest_Issues#Showing-an-issue
def get_issue(api_key, issue_id, **kwargs):
  """根据issue_id获取issue详情"""
  return requests.get("http://redmine.xuh.me/issues/{}.json".format(issue_id), params=kwargs, headers={"X-Redmine-API-Key": api_key}).text

Read More

Python接口测试实战4 - 封装redmine接口

为了更好的演示接口测试,笔者部署了一个Redmine服务,本系列文章均以该系统作为被测试服务,当然你也可以自己搭建一个redmine系统,可以利用docker快速部署:https://hub.docker.com/_/redmine

1. 接口文档

接口文档是进行接口测试的必要输入,一份好的接口文档笔者认为需要包含以下要素:

  • 接口的鉴权方法
  • 接口的调用时序
  • 接口的必传、可选参数,以及各参数的语义
  • 接口响应报文,以及相关字段语义
  • 接口请求、响应报文demo

Read More

DataStore使用介绍

在测试框架的data目录下有test.jsontest2.json两份文件,用于存放test、test2环境的静态测试数据,比如:

{
    "id": "581e3432-9f03-0ae3-ddc5-d197601c6850",
    "sn": "00000261001200200019186",
    "name": "自动化测试门店",
    "industry": "e586aa25-312d-11e6-aebb-ecf4bbdee2f0",
    "address": ["江苏省", "苏州市", "姑苏区", "干将路99号"],
    "merchant": "default_merchant",
    "contact_name": "Robot",
    "contact_cellphone": "10088880001",
    "cashiers": ["default_cashier"],
    "admins": ["default_admin"],
    "@object": "store",
    "@extended": {
        "label": "default_store",
        "group": "store"
    }
},
{
    "id": "5c82b3f9-e5d2-4e21-ab4b-800d6c7b7265",
    "sn": "1580000000517499",
    "name": "无锡办事处",
    "industry": "e586aa25-312d-11e6-aebb-ecf4bbdee2f0",
    "address": ["江苏省", "无锡市", "崇安区", "湖滨大道99号"],
    "contact_name": "Bill Smith",
    "contact_cellphone": "10088880002",
    "merchant": "default_merchant",
    "admins": ["alternative_admin"],
    "cashiers": ["alternative_cashier"],
    "@object": "store",
    "@extended": {
        "label": "alternative_store",
        "group": "store"
    }
}

Read More