pytest parametrize多参数接口请求及展示中文响应数据

 编写登陆接口

app.py

from flask import Flask, request, jsonify, Response

app = Flask(__name__)

@app.route('/login', methods=['POST'])
def login():
    username = request.form.get('username')
    password = request.form.get('password')

    # 在这里编写你的登录验证逻辑
    if username == 'admin' and password == 'password':
        # 登录成功
        response = jsonify({'message': '登录成功'})
        response.status_code = 200
    else:
        # 登录失败
        response = jsonify({'message': '登录失败'})
        response.status_code = 401

    return response

if __name__ == '__main__':
    app.run()

 

import requests
import pytest

# 使用@pytest.mark.parametrize装饰器定义了一组参数化的测试数据
@pytest.mark.parametrize('data, username, password, status_code', [
    ('登陆成功', 'admin', 'password', 200),
    ('登陆失败', 'admin1', 'password1', 401)
])
def test_case01(data, username, password, status_code):
    # 打印测试用例的信息
    print('\n[测试用例]', data)

    # 构造登录请求的URL和数据
    url = 'http://127.0.0.1:5000/login'
    data = {
        "username": username,
        "password": password
    }

    # 发送POST请求
    res = requests.post(url=url, data=data)

    # 响应内容展示为中文
    response_text = res.text.encode('utf-8').decode('unicode_escape')
    print(response_text)

    # 断言实际的状态码与预期的状态码是否相等
    assert 200 == status_code

if __name__ == '__main__':
    # 使用pytest执行测试用例
    pytest.main(['-v', 'test_case.py'])

这段代码是一个使用pytestrequests库编写的测试脚本,用于测试登录功能。它包含一个名为test_case01的测试用例,使用@pytest.mark.parametrize装饰器定义了一组参数化的测试数据。

测试数据包括登录成功和登录失败的情况。每组测试数据都有datausernamepasswordstatus_code四个参数。data参数用于描述测试用例的信息,usernamepassword参数是登录时使用的用户名和密码,status_code参数是预期的响应状态码。

测试用例函数内部首先打印测试用例的信息,然后构造登录请求的URL和数据。接下来,使用requests.post方法发送POST请求,并将响应保存在res变量中。

为了将响应内容以中文展示,使用了以下代码行:

response_text = res.text.encode('utf-8').decode('unicode_escape')

这段代码将响应的文本内容进行了编码和解码操作。首先,使用encode('utf-8')将文本内容编码为UTF-8格式的字节串,然后使用decode('unicode_escape')将字节串解码为Unicode字符串。这样做可以确保中文字符正确显示。

最后,使用print(response_text)将响应内容打印出来。然后使用assert语句来断言实际的状态码与预期的状态码是否相等。

在脚本的最后部分,通过pytest.main(['-v','test_case.py'])来执行测试用例。

你可能感兴趣的:(接口测试,#,pytest测试框架,pytest)