python自动化测试工具开发_一个用于RESTful API自动化测试的命令行工具

Tavern是一个用于API自动化测试的pytest插件,支持RESTful API和MQTT协议。通过简洁的YAML语法,轻松创建和定制测试用例。与pytest集成,可以利用其丰富的生态系统,如定时运行测试、生成报告等。Tavern相比Postman等工具,提供了更强大的Python环境和更直观的测试语言,适用于开发者进行API自动化测试。
摘要由CSDN通过智能技术生成

68747470733a2f2f7472617669732d63692e6f72672f74617665726e74657374696e672f74617665726e2e7376673f6272616e63683d6d6173746572

68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f74617665726e2e737667

Easier API testing

Tavern is a pytest plugin, command-line tool and Python library for automated testing of APIs, with a simple, concise and flexible YAML-based syntax. It's very simple to get started, and highly customisable for complex tests. Tavern supports testing RESTful APIs as well as MQTT based APIs.

The best way to use Tavern is with pytest. Tavern comes with a pytest plugin so that literally all you have to do is install pytest and Tavern, write your tests in .tavern.yaml files and run pytest. This means you get access to all of the pytest ecosystem and allows you to do all sorts of things like regularly run your tests against a test server and report failures or generate HTML reports.

You can also integrate Tavern into your own test framework or continuous integration setup using the Python library, or use the command line tool, tavern-ci with bash scripts and cron jobs.

To learn more, check out the examples or the complete documentation. If you're interested in contributing to the project take a look at the GitHub repo.

Quickstart

First, let's create a basic test, test_minimal.tavern.yaml:

---

# Every test file has one or more tests...

test_name: Get some fake data from the JSON placeholder API

# ...and each test has one or more stages (e.g. an HTTP request)

stages:

- name: Make sure we have the right ID

# Define the request to be made...

request:

url: https://jsonplaceholder.typicode.com/posts/1

method: GET

# ...and the expected response code and body

response:

status_code: 200

body:

id: 1

This file can have any name, but if you intend to use Pytest with Tavern, it will only pick up files called test_*.tavern.yaml.

This can then be run like so:

$ pip install tavern[pytest]

$ py.test test_minimal.tavern.yaml -v

=================================== test session starts ===================================

platform linux -- Python 3.5.2, pytest-3.4.2, py-1.5.2, pluggy-0.6.0 -- /home/taverntester/.virtualenvs/tavernexample/bin/python3

cachedir: .pytest_cache

rootdir: /home/taverntester/myproject, inifile:

plugins: tavern-0.7.2

collected 1 item

test_minimal.tavern.yaml::Get some fake data from the JSON placeholder API PASSED [100%]

================================ 1 passed in 0.14 seconds =================================

It is strongly advised that you use Tavern with Pytest - not only does it have a lot of utility to control discovery and execution of tests, there are a huge amount of plugins to improve your development experience. If you absolutely can't use Pytest for some reason, use the tavern-ci command line interface:

$ pip install tavern

$ tavern-ci --stdout test_minimal.tavern.yaml

2017-11-08 16:17:00,152 [INFO]: (tavern.core:55) Running test : Get some fake data from the JSON placeholder API

2017-11-08 16:17:00,153 [INFO]: (tavern.core:69) Running stage : Make sure we have the right ID

2017-11-08 16:17:00,239 [INFO]: (tavern.core:73) Response: '' ({

"userId": 1,

"id": 1,

"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",

"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"

})

2017-11-08 16:17:00,239 [INFO]: (tavern.printer:9) PASSED: Make sure we have the right ID [200]

Why not Postman, Insomnia or pyresttest etc?

Tavern is a focused tool which does one thing well: automated testing of APIs.

Postman and Insomnia are excellent tools which cover a wide range of use-cases for RESTful APIs, and indeed we use Tavern alongside Postman. However, specifically with regards to automated testing, Tavern has several advantages over Postman: - A full-featured Python environment for writing easily reusable custom validation functions - Testing of MQTT based systems in tandem with RESTful APIS. - Seamless integration with pytest to keep all your tests in one place - A simpler, less verbose and clearer testing language

Tavern does not do many of the things Postman and Insomnia do. For example, Tavern does not have a GUI nor does it do API monitoring or mock servers. On the other hand, Tavern is free and open-source and is a more powerful tool for developers to automate tests.

pyresttest is a similar tool to Tavern for testing RESTful APIs, but is no longer actively developed. On top of MQTT testing, Tavern has several other advantages over PyRestTest which overall add up to a better developer experience:

Cleaner test syntax which is more intuitive, especially for non-developers

Validation function are more flexible and easier to use

Better explanations of why a test failed

Hacking on Tavern

If you want to add a feature to Tavern or just play around with it locally, it's a good plan to first create a local development environment (this page has a good primer for working with development environments with Python). After you've created your development environment, just pip install tox and run tox to run the unit tests. If you want to run the integration tests, make sure you have docker installed and run tox -c tox-integraton.ini (bear in mind this might take a while.) It's that simple!

If you want to add a feature to get merged back into mainline Tavern:

Add the feature you want

Add some tests for your feature:

If you are adding some utility functionality such as improving verification of responses, adding some unit tests might be best. These are in the tests/unit/ folder and are written using Pytest.

If you are adding more advanced functionality like extra validation functions, or some functionality that directly depends on the format of the input YAML, it might also be useful to add some integration tests. At the time of writing, this is done by adding an example flask endpoint in tests/integration/server.py and a corresponding Tavern YAML test file in the same directory. This will be cleaned up a bit once we have a proper plugin system implemented.

Note that Tavern supports Python 2.7 (for the time being), so any code you add has to be compatible with it. We currently use the future library to provide backwards compatibility.

Acknowledgements

Tavern makes use of several excellent open-source projects:

pytest, the testing framework Tavern intergrates with

requests, for HTTP requests

YAML and pyyaml, for the test syntax

pykwalify, for YAML schema validation

pyjwt, for decoding JSON Web Tokens

colorlog, for formatting terminal outputs

paho-mqtt, for sending MQTT messages

Maintenance

Tavern is currently maintained by

@michaelboulton

@benhowes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值