到心 2024-06-11 16:28 采纳率: 0%
浏览 4
已结题

接口自动化测试:Pycharm+pytest

利用Python编写接口自动化测试脚本,最后一步生成allure报告出错了!
问题:每个脚本文件都可单独运行,但在控制台输入pytest后,有些脚本类或者方法识别不出来
这个是我这个目录

img

test_03的脚本如下:

from api.login import LoginAPI
from api.course import CourseAPI
from api.contract import ContractAPI
import config

class Testcourse:
    token=None

    def setup(self):
        self.login_api=LoginAPI()
        self.course_api=CourseAPI()
        self.contract_api=ContractAPI()

    def teardown(self):
        pass

    #1.登入成功
    def test_login_success(self):
        res_v = self.login_api.verify()
        print(res_v.status_code)
        print(res_v.json().get("uuid"))
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid": res_v.json().get("uuid")
        }
        res_l=self.login_api.login(test_data=login_data)
        print(res_l.status_code)
        print(res_l.json())
        Testcourse.token=res_l.json().get("token")

    # 2.课程新增成功
    def test_course_success(self):
        course_data={"name":"测试开发提升课100","subject":"5","price":899,"applicablePerson":"2","info":"测试开发提升课01"}
        res_cou=self.course_api.add_course(token=Testcourse.token,test_data=course_data)
        print(res_cou.status_code)
        print(res_cou.json())

    # 3.合同上传成功(合同文件放入data文件夹中)
    def test_up_contract_success(self):
        contract_data=open(config.BASE_PATH+"/data/test.pdf","rb")
        res_up_con=self.contract_api.up_contract(token=Testcourse.token,test_data=contract_data)
        print(res_up_con.status_code)
        print(res_up_con.json())

    # 4.新增合同成功
    def test_add_contract_success(self):
        contract_data={
            "name": "测试888",
            "phone": "13612341888",
            "contractNo": "HT10012004",
            "subject": "6",
            "courseId": 99,
            "channel": "0",
            "activityId": 77,
            "fileName": "/profile/upload/2023/01/05/86e5a3b8-b08c-470c-a17d-71375c3a8b9f.pdf"
        }
        res_add_con=self.contract_api.add_contract(token=Testcourse.token,test_data=contract_data)
        print(res_add_con.status_code)
        print(res_add_con.json())

test_04的脚本如下:

from api.login import LoginAPI

class TestLogin:
    uuid=None
    def setup(self):
        self.login_api=LoginAPI()
        res_c=self.login_api.verify()
        TestLogin.uuid = res_c.json().get("uuid")

    def teardown(self):
        pass

    #登入用例一
    def test_login__all_success(self):
        login_data = {
            "username": "admin",
            "password": "HM_2023_test",
            "code": 2,
            "uuid":TestLogin.uuid
        }
        res_l=self.login_api.login(test_data=login_data)
        assert 200==res_l.status_code
        assert '成功' in res_l.text
        assert 200==res_l.json().get("code")

    # 登入用例二
    def test_login_username_null(self):
        login_data = {
            "username": "",
            "password": "HM_2023_test",
            "code": 2,
            "uuid":TestLogin.uuid
        }
        res_l=self.login_api.login(test_data=login_data)
        assert 200==res_l.status_code
        assert '错误' in res_l.text
        assert 500==res_l.json().get("code")

    # 登入用例三
    def test_login_username_fail(self):
        login_data = {
            "username": "jw1223",
            "password": "HM_2023_test",
            "code": 2,
            "uuid":TestLogin.uuid
        }
        res_l=self.login_api.login(test_data=login_data)
        assert 200==res_l.status_code
        assert '错误' in res_l.text
        assert 500==res_l.json().get("code")

运行结果如下:

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-11 16:28
    关注

    引自免费微信小程序:皆我百晓生

    从描述来看,主要问题是部分测试类或方法在执行pytest时未能被识别。这通常与测试发现机制、模块导入路径或pytest配置有关。为了解决这个问题,可以尝试以下几个步骤:

    1. 确认pytest.ini配置: 确保pytest.ini文件正确配置了根目录下的apiscript目录。pytest.ini文件应包含如下内容(如果尚未添加):

      [pytest]
      addopts = -s
      python_files = test*.py
      python_classes = Test*
      python_functions = test_*
      
    2. 检查模块导入路径: 确保apicommon等目录中有__init__.py文件,这使它们成为Python包,从而可以被正确导入。

    3. 修改测试类命名: Pytest默认寻找以Test开头的类。虽然test_03.py中的类名Testcourse理论上符合规则,但确保所有测试类均遵循此命名约定可能会避免潜在问题。

    4. 测试收集调试: 在命令行中使用--collect-only选项运行pytest,这将列出所有被发现的测试,帮助确定哪些测试未能被识别:

      pytest --collect-only
      
    5. 更新测试脚本执行命令: 如果上述方法仍无法解决问题,尝试直接指定要运行的测试脚本目录:

      pytest script/
      
    6. 环境变量与虚拟环境: 确保所有测试脚本都在同一虚拟环境中运行,并且该环境包含了所有必要的依赖项。

    对于test_03.pytest_04.py的具体代码,看起来结构上没有明显错误。然而,test_03.pytest_login_success方法生成的token用于后续的测试,这是一个好的实践,但是确保这个token在所有需要它的测试中都被正确使用。

    此外,关于test_03.pytest_up_contract_success方法,open函数用于读取文件时,确保文件路径正确无误,并且文件确实存在于指定位置。

    最后,考虑到你提到的运行结果,似乎test_03.py中的测试能够成功执行并打印输出,而test_04.py及之后的脚本可能未被识别或执行。通过上述建议进行排查,应该能解决当前遇到的问题。如果问题依旧,更详细的日志或错误信息可能有助于进一步诊断。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月11日
  • 创建了问题 6月11日