Skip to content

自动化测试用例

自动化测试用例

这里根据手工测试用例从 P0,P1,P2 级别的用例中选择一部分实现自动化测试。

目标

  1. 准确性:保证接口的实际效果符合预期效果,且数据传输准确无误。
  2. 性能优化:通过接口测试来评估系统性能,如响应时间、并发处理能力等。
  3. 兼容性:确保接口在不同的环境、设备和网络情况下都能正常工作。
  4. 安全性:通过接口测试来查找和预防潜在的安全风险。
  5. 提高软件质量:通过早期发现与修复问题,从而提高软件的质量和稳定性。

步骤

  1. 理解和确定接口的业务需求:一切测试都需要以业务需求为驱动,理解接口的业务逻辑,明确接口的功能需求。

  2. 设计测试用例:根据接口需求设计出覆盖各种场景的测试用例,包括正常业务流程、异常流程和边界值处理等。

  3. 设置测试环境:确保测试环境和生产环境尽可能一致,避免因环境问题导致测试结果的无效。

  4. 执行测试用例:按照设计好的用例执行测试,如果有自动化测试工具,可以实现批量执行。

  5. 检查测试结果:验证测试结果是否符合预期,记录测试结果并分析问题所在。

  6. 反馈并跟踪缺陷:将测试中发现的问题以缺陷的形式反馈给开发人员,并进行跟踪直至问题解决。

  7. 回归测试:修复接口问题后,对接口进行回归测试,验证问题是否被正确修复,并接口的其他功能是否受到影响。

参考示例

import allure
import pytest
import requests

from ThingsBoard.util.logger import logger


@allure.epic("物联网设备管理")
class TestTingsBoard:
    api = "https://thingsboard.stu.hogwarts.ceshiren.com/api/"
    username = "hogwarts1@ceshiren.com"
    password = "123456"

    def login(self, username, password):
        data = {
            "username": username,
            "password": password
        }
        url = self.api + 'auth/login'
        r = requests.post(url, json=data, verify=False)
        return r.json()

    @pytest.mark.P0
    @allure.feature("【正向验证】添加设备")
    @pytest.mark.parametrize('name', ['中', "api自动化测试", "hogwarts", 1234])
    def test_add_tingsboard(self, name):
        token = self.login(self.username, self.password)['token']
        header = {
            "X-Authorization": "Bearer " + token
        }
        url = self.api+"device"
        data = {
            # 名称
            "name": name,
        }
        r = requests.post(url, json=data, headers=header, verify=False)
        logger.info(f"响应的状态码为:{r.status_code}, 添加的设备名称为:{r.json()['name']}")
        assert r.status_code == 200
        assert r.json()['name'] == f"{name}"

    @pytest.mark.P0
    @allure.feature("【逆向验证】添加设备")
    @pytest.mark.parametrize('name', ['  ',  None, ''])
    def test_add_tingsboard_error(self, name):
        token = self.login(self.username, self.password)['token']
        header = {
            "X-Authorization": "Bearer " + token
        }
        url = self.api + "device"
        data = {
            # 名称
            "name": name,
        }
        r = requests.post(url, json=data, headers=header, verify=False)
        logger.info(f"响应的状态码为:{r.status_code}")
        logger.info(f"响应内容为:{r.json()}")
        assert r.status_code == 400

    @pytest.mark.P1
    @allure.feature("【逆向验证】不传递参数")
    def test_not_param_error(self):
        token = self.login(self.username, self.password)['token']
        header = {
            "X-Authorization": "Bearer " + token
        }
        url = self.api + "device"
        r = requests.post(url, headers=header, verify=False)
        logger.info(f"响应的状态码为:{r.status_code}")
        logger.info(f"响应内容为:{r.json()}")
        assert r.status_code == 500

    @pytest.mark.P0
    @allure.feature("【正向验证】查询设备")
    @pytest.mark.parametrize('name', ['中', "api自动化测试", "hogwarts", 1234])
    def test_get_tingsboard(self, name):
        token = self.login(self.username, self.password)['token']
        header = {
            "X-Authorization": "Bearer " + token
        }
        url = self.api + "tenant/devices"
        param = {
            "deviceName": name
        }
        r = requests.get(url, params=param, headers=header, verify=False)
        logger.info(f"响应的状态码为:{r.status_code}")
        logger.info(f"响应内容为:{r.json()}")
        assert r.status_code == 200

    @pytest.mark.P0
    @allure.feature("【逆向验证】查询设备")
    @pytest.mark.parametrize('name', ['   ', "", None, "gsdhsdghsd"])
    def test_get_tingsboard_error(self, name):
        token = self.login(self.username, self.password)['token']
        header = {
            "X-Authorization": "Bearer " + token
        }
        url = self.api + "tenant/devices"
        param = {
            "deviceName": name
        }
        r = requests.get(url, params=param, headers=header, verify=False)
        logger.info(f"响应的状态码为:{r.status_code}")
        logger.info(f"响应内容为:{r.json()}")
        assert r.status_code != 200

    @pytest.mark.P1
    @allure.feature("【逆向验证】不传递参数")
    def test_get_no_param(self):
        token = self.login(self.username, self.password)['token']
        header = {
            "X-Authorization": "Bearer " + token
        }
        url = self.api + "tenant/devices"
        r = requests.get(url, headers=header, verify=False)
        logger.info(f"响应的状态码为:{r.status_code}")
        logger.info(f"响应内容为:{r.json()}")
        assert r.status_code == 400

    @pytest.mark.P0
    @allure.feature("【正向验证】登录获取token")
    def test_login(self):
        token = self.login(self.username, self.password)['token']
        assert token

    @pytest.mark.P0
    @allure.feature("【逆向验证】错误的用户信息登录")
    def test_login_error(self):
        result = self.login("dsafhadf", "13252345")
        logger.info(f"响应结果为:{result}")
        assert result
        assert result['status'] == 401