现在,我们将创建一个小的pytest框架来测试API。这里使用的API是https://reqres.in/的免费API 。该网站仅提供可测试的API。该网站不存储我们的数据。
在这里,我们将为
使用给定的代码创建以下文件
conftest.py-有一个fixture,可以为所有测试方法提供基本网址
导入pytest
@ pytest.fixture
def supply_url():
返回“ https://reqres.in/api”
test_list_user.py –包含列出有效和无效用户的测试方法
import pytest
import requests
import json
@pytest.mark.parametrize("userid, firstname",[(1,"George"),(2,"Janet")])
def test_list_valid_user(supply_url,userid,firstname):
url = supply_url + "/users/" + str(userid)
resp = requests.get(url)
j = json.loads(resp.text)
assert resp.status_code == 200, resp.text
assert j['data']['id'] == userid, resp.text
assert j['data']['first_name'] == firstname, resp.text
def test_list_invaliduser(supply_url):
url = supply_url + "/users/50"
resp = requests.get(url)
assert resp.status_code == 404, resp.text
test_login_user.py –包含用于测试登录功能的测试方法。
import pytest
import requests
import json
def test_login_valid(supply_url):
url = supply_url + "/login/"
data = {'email':'test@test.com
','password':'something'}
resp = requests.post(url, data=data)
j = json.loads(resp.text)
assert resp.status_code == 200, resp.text
assert j['token'] == "QpwL5tke4Pnpja7X", resp.text
def test_login_no_password(supply_url):
url = supply_url + "/login/"
data = {'email':'test@test.com'}
resp = requests.post(url, data=data)
j = json.loads(resp.text)
assert resp.status_code == 400, resp.text
assert j['error'] == "Missing password", resp.text
def test_login_no_email(supply_url):
url = supply_url + "/login/"
data = {}
resp = requests.post(url, data=data)
j = json.loads(resp.text)
assert resp.status_code == 400, resp.text
assert j['error'] == "Missing email or username", resp.text
使用py.test -v运行测试
看到的结果是
test_list_user.py::test_list_valid_user[1-George] PASSED
test_list_user.py::test_list_valid_user[2-Janet] PASSED
test_list_user.py::test_list_invaliduser PASSED
test_login_user.py::test_login_valid PASSED
test_login_user.py::test_login_no_password PASSED
test_login_user.py::test_login_no_email PASSED