You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过控制台菜单调用exec()执行指定pytest测试方法?

如何通过Python调用pytest执行指定测试方法

首先直接回应你的核心疑问:exec('pytest -s login.test_2') 是不可行的。因为exec()函数的作用是执行Python代码字符串,而pytest -s login.test_2是一条Shell命令,exec会尝试把它当作Python代码解析,必然会抛出语法错误。

下面给你两种可靠的实现方式,推荐第一种:

方法一:使用subprocess模块(推荐)

这是Python官方推荐的执行外部命令的方式,安全、可控,还能捕获命令输出、返回状态码等信息。

修改你的控制台菜单代码如下:

import subprocess

n = int(input("请选择测试项:"))
if n == 1:
    # 执行test_1.py的所有测试
    subprocess.run(['pytest', '-s', 'test_1.py'], check=True)
elif n == 2:
    # 执行login.py中的test_2方法
    subprocess.run(['pytest', '-s', 'login.test_2'], check=True)
  • check=True:如果pytest执行失败(比如测试用例不通过),会抛出subprocess.CalledProcessError异常,方便你处理错误场景;如果不需要捕获异常,可以去掉这个参数。
  • 用列表形式传递命令参数,避免了Shell注入风险,比直接用字符串+shell=True更安全。

方法二:使用os.system(简易但不推荐)

如果你只是想要一个快速能用的简易方案,也可以用os.system,它会直接调用Shell执行命令:

import os

n = int(input("请选择测试项:"))
if n == 1:
    os.system('pytest -s test_1.py')
elif n == 2:
    os.system('pytest -s login.test_2')

但这种方式的缺点是:无法直接获取命令的返回码、输出内容,而且存在Shell注入的安全风险(如果你的菜单接收用户输入的话),所以更推荐用subprocess。

额外注意:你的login.py代码小问题

看你贴的login.py代码,有个小笔误会导致pytest识别不到测试方法,记得修正:

# 原代码里的@Scenario是大写,但你定义的变量是小写scenario,且pass不需要加括号
from functools import partial
import pytest_bdd
scenario = partial(pytest_bdd.scenario, '..\login.feature')
@scenario('login 2')
def test_2(): 
    pass

内容的提问来源于stack exchange,提问作者Bambooprog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:12:52