Skip to main content

An framework for automated testing interface

Project description

easytest

easytest是一个接口自动化框架。

功能特点:

  • 支持http接口测试
  • 支持jsonhtml,xml格式的响应断言
  • 支持数据库断言
  • 支持用例标记筛选
  • 支持用例失败重运行
  • 支持多线程

安装

pip install lemon_easytest

快速使用

不需要写任何代码,所有你需要做的就是按照规则编写用例文档,然后运行命令easytest

easytest支持yaml格式和excel格式的用例文档。

在任意目录下创建文件singe_test.yaml,内容如下:

test:                                 # 表名这是单个测试用例
  title: 一个简单的测试                 # 用例名称
  url: http://httpbin.org/get         # url
  method: get                         # 请求方法
  request:                            # 请求参数字段
    headers:                          # 请求头
      CustomerHeader: lemonban        # 头信息
    params:                           # url参数
      search: lemonban                # url参数键值对
  res_type: json                      # 响应数据类型
  status_code: 200                    # 状态码
  assertion:                          # 断言表达式
    -
      - eq                            # 相等
      - $..Customerheader             # 结果提取表达式
      - lemonban                      # 期望值
    -
      - eq
      - $..search
      - lemonban

然后在命令行运行

easytest yourpath/single_test.yaml
INFO 2021-10-30 14:53:26,081 :==========single_test测试开始============
INFO 2021-10-30 14:53:26,081 :用例【一个简单的测试】开始测试>>>>>>>>
INFO 2021-10-30 14:53:26,591 :用例【一个简单的测试】测试结束<<<<<<<<<
INFO 2021-10-30 14:53:26,591 :==========single_test测试结束============
用例总数:1,成功:1个,跳过:0,失败:0个,错误:0个

通过python代码调用easytest

可以直接通过python调用easytest

import easytest
easytest.main()

也可传递参数

easytest.main(['test_dir', '--debug', '--logfile', 'test.log'])

编写用例

测试用例

easytest中编写单条测试用例可以使用yaml格式,也可以使用excel文件。

excel格式

使用excel文件编写单条测试用例非常简单,例如将上面的案例编写到excel文件中格式如下:

当用excel文件编写用例时保持数据的整洁,其他单元格不要有任何数据,以免加载用例数据失败。easytest会根据excel文件的sheetname来组织用例,所以单条用例请删除其他的表。

yaml格式

当使用yaml文件编写单条测试用例时最外层键必须为test,因为easytest根据它来确定一个yaml文件中的数据是单条测试用例。

test:                                 # 表名这是单个测试用例
  title: 一个简单的测试                 # 用例名称
  url: http://httpbin.org/get         # url
  method: get                         # 请求方法
  request:                            # 请求参数字段
    headers:                          # 请求头
      CustomerHeader: lemonban        # 头信息
    params:                           # url参数
      search: lemonban                # url参数键值对
  res_type: json                      # 响应数据类型
  status_code: 200                    # 状态码
  assertion:                          # 断言表达式
    -
      - eq                            # 相等
      - $..Customerheader             # 结果提取表达式
      - lemonban                      # 期望值
    -
      - eq
      - $..search
      - lemonban

测试套件

easytest中测试套件表示一组有顺序的测试用例,当启动多线程时,以测试套件为单位交给线程去按照套件中的顺序执行测试用例。注意套件和套件间的执行顺序是不固定的。

单个测试用例也会被套上一层测试套件的壳子,yaml格式的单测试用例会被封装到以yaml文件名为名字的测试套件中,excel格式的单测试用例会被封装到以表名为名字的测试套件中。

excel格式

excel文件中编写测试套件与单测试用例没有区别,按照执行顺序从上往下依次编写即可,例如:

在单个excel文件中可以编写多个测试套件,一个表即为一个测试套件,所以非测试用例或者项目设置的表请删除。

yaml格式

在yaml文件中编写测试套件,最外层的key必须为test_suit,因为easytest根据它来确定一个yaml文件中的数据是一个测试套件。注意和excel不同,yaml格式不支持在一个文件中编写多个测试套件,因为多层级的嵌套缩进将是噩梦。

test_suit:
  - title: 一个简单的测试
    url: http://httpbin.org/post
    method: post
    status_code: 200
    res_type: json
    request:
      json:
        username: xinlan
        password: 123456
    assertion:
      - [eq,$..username,xinlan]
      - [eq,$..password,123456]

  - title: 一个不简单的测试
    url: http://httpbin.org/post
    method: post
    status_code: 200
    res_type: json
    request:
      json:
        username: xinlan
        password: 123456
    assertion:
      - [ eq,$..username,xinlan ]
      - [ eq,$..password,123456 ]

用例收集规则

easytest 命令后接受一个位置参数file_or_dir,它可以是一个用例文件,也可以是一个目录。

当传入一个用例文件时,它必须是上一节提到的符合格式的excel或者yaml文件,excel文件只支持.xlsx后缀的格式,yaml文件支持.yaml或者.yml后缀。

当传入一个目录时,easytest会递归的去这个目录下搜索所有符合规则的用例文件(excel、yaml),并从中提取用例,当遇到格式错误时,程序会中断,所以不要把无关的Excel文件和yaml文件放在用例目录下。

用例字段说明

  • title

    字符串,用例标题

  • url

    字符串,请求的url,支持完整url,例如https://httpbin.org/get,也支持项目配置中的接口对应的key。例如:register

  • method

    字符串,http请求方法

  • request

    json对象,http请求携带的参数,请求头,cookie等。底层调用python的requests库,参数名完全一致。

    • params

      json对象,http请求携带的url参数。例如

      request:
      	params:
      		search: python
      
    • data

      json对象,http请求携带的表单参数。例如

      request:
        data:
          username: xinlan
          password: 123456
      
    • json

      json对象,http请求携带的json参数。例如

      request:
      	json:
      	  username: xinlan
      	  password: 123456
      
    • headers

      json对象,http请求携带的header。例如

      request:
      	headers:
      	  X-Lemonban-Media-Type: lemonban.v1
      
    • cookie

      json对象,http请求携带的cookie信息。例如

      request:
      	cookies:
      		key: value
      
  • res_type

    字符串,http响应类型,可选值有:json,xml,html

  • status_code

    整数,http断言响应状态码。

  • assertion

    数组对象,响应结果断言表达式。格式为: [[条件符号,提取表达式,期望结果],[条件符号1,提取表达式1,期望结果1],...],例如:

    assertion:
      - [eq,$..username,xinlan]
      - [eq,$..password,123456]
    

    条件符号支持:

    • eq: 相等
    • gt: 大于
    • gte:大于等于
    • lt: 小于
    • lte:小于等于
    • in:在其中
    • contains:包含

    目前仅支持eq

    提取表达式支持:

    • 正则表达式
    • jsonpath表达式
    • xpath
  • db_assertion

    数组对象,数据库断言表达式。格式为: [[条件符号,sql语句,期望结果],[条件符号1,sql语句1,期望结果1],...],例如:

    db_assertion:
      - [eq,select leave_amount from member where id=#invest1_id#,0]
      - [exist,select id from invest where member_id=#invest1_id# and loan_id=#loan_id# and amount=5000,true]
      - [exist,select id from financelog where pay_member_id=#invest1_id# and amount=5000 and pay_member_money=0 and status=1,true]
    

    条件符号支持:

    • eq: 相等
    • exist: 存在。使用exist时,期望结果必须为true
  • extract

    数组对象,响应结果提取表达式。格式为[[变量名,提取表达式],[变量名2,提取表达式2],...]例如:

    exract:
    	- [mobile_phone, $..mobile_phone]
    	- [token, $..token]
    

    底层easytest会将提取出的值绑定到用例类的变量名属性上,供后面的用例依赖。

    提取表达式支持:

    • jsonpath
    • 正则表达式
    • xpath表达式
  • marks

    字符串,用例标记,运行参数中可以筛选出匹配的标记用例

项目配置

easytest命令会从当前目录下读取名为easytest.ini的配置文件,下面是一个完整配置文件的例子:

[project]  																# 项目配置段
name = xxx项目													   # 项目名称	  
host = http://some.api.root.com           # 项目接口根地址
[db_config]																# 数据库配置
host = dbhost										          # 数据库主机	
user = root																# 数据库用户
password = 123456                         # 数据库密码
db = somedb																# 数据库名
charset = utf8														# 字符编码
port = 3306																# 端口
[interfaces]															# 接口地址
register: /member/register								# 注册接口对应地址		
login: /member/login											# 登录接口对应地址
withdraw: /member/withdraw		
recharge: /member/recharge
add: /loan/add
audit: /loan/audit
invest: /member/invest
[run]																			# 运行时参数
debug=true																# 开启调试模式
logfile=a.log															# 日志文件
marks=success,login												# 筛选标记	
thread_num=10															# 启动线程数量
retry=3																		# 失败重跑次数
report=result.json												# 报告文件

project

project段,支持name和host

  • name 项目名称
  • host 项目接口根地址,注意不要以/结尾

db_config

db_config段,数据库配置,目前仅支持mysql

  • host 数据库主机
  • user 数据库用户名
  • password 数据密码
  • db 数据库名
  • port 端口
  • charset 字符串编码

interfaces

interfaces段,接口名称配置,格式:key=value,key是接口名称字符串,value是去掉主机后的接口地址以/开头,在用例中url字段可以填写key,easytest内部会使用项目host+接口地址进行拼接。

run

run字段,运行时的参数。

  • debug 调试模式,默认为false
  • logfile 生成日志文件,可以是绝对路径或者是相对路径
  • marks 需要筛选的标记,多个标记使用逗号隔开,例如:success,login,表示会筛选被标记了successlogin的用例。
  • thread_num 启动线程的数量,默认为0表示单线程执行
  • retry 用例失败后重跑的次数,默认为0表示不重跑
  • report 生成报告的文件名,根据后缀自动生成对应报告,暂只支持json格式。

注意:命令行参数会覆盖项目配置。

生成模拟测试数据

在测试过程中有时需要动态的生成测试数据,例如手机号码,人名等。easytest通过Faker模块来生产模拟数据,暂时只支持简体中文语言下的接口,详情见Faker简体中文providers

用例中支持生产模拟测试数据的字段有,url,request,db_assertion

使用格式为$生成数据接口名$

例如在Faker中生成手机号码的方法名为phone_number,那么在用例中使用$phone_number$表示动态生成手机号码。

test:                                 # 表名这是单个测试用例
  title: 一个简单的测试                  # 用例名称
  url: http://httpbin.org/get         # url
  method: get                         # 请求方法
  request:                            # 请求参数字段
    headers:                          # 请求头
      CustomerHeader: lemonban        # 头信息
    params:                           # url参数
      search: lemonban                # url参数键值对
      phone: $phone_number$

上面这个用例表示url参数phone是一个动态生成的手机号码。

接口依赖的处理

easytest中,同一个测试套件下,前一个用例返回的数据可以通过变量传递给下一个用例。

例如登录成功后将返回的token值传递给下一个需要token的用例。传递步骤如下:

  1. 在登录用例中添加extract字段提取响应回的token值,并绑定到你定义的变量名admin_token
  2. 在后面的用例中,在需要使用到token的数据部分就可以使用#admin_token#,来表示,easytest会在自动进行替换

所有你需要做的,只是按照规则编写用例,剩下的交给easytest。

命令行参数说明

  • file_or_dir

    字符串,项目路径,或者需要执行的用例文件

  • --debug

    开启日志调试模式

  • --logfile

    字符串,日志文件路径

  • --marks

​ 字符串,运行时选择的标记

  • --thread_num

    整数,运行时启动线程的数量,默认为0表示单线程执行

  • --report

    字符串,测试报告文件路径,按照文件后缀生成对应的格式的报告

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lemon_easytest-1.0a3.tar.gz (23.3 kB view details)

Uploaded Source

Built Distribution

lemon_easytest-1.0a3-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file lemon_easytest-1.0a3.tar.gz.

File metadata

  • Download URL: lemon_easytest-1.0a3.tar.gz
  • Upload date:
  • Size: 23.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.6

File hashes

Hashes for lemon_easytest-1.0a3.tar.gz
Algorithm Hash digest
SHA256 3d79077799246965f3fd2126ace2696b14e4121c55d4200a456071b3c6ee6ce1
MD5 d077e6d6836a278fe26e779e5c65a53a
BLAKE2b-256 af6af691e34fe6108d09c04d3925a1ea2bb3e3a9c6b69c095e49ce1fda73e5f9

See more details on using hashes here.

File details

Details for the file lemon_easytest-1.0a3-py3-none-any.whl.

File metadata

  • Download URL: lemon_easytest-1.0a3-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.6

File hashes

Hashes for lemon_easytest-1.0a3-py3-none-any.whl
Algorithm Hash digest
SHA256 958366d0087d3a97ace05ef2687e2e01888f502cf86427f10b9c2c581549dc49
MD5 9588de7dc1d3fbe370a19329baf522ae
BLAKE2b-256 2a80e89ad53fb1b6424029a02eda133b6dc2374f46e2a84175b17ff7a417b47c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page