添加pytest到自动化测试时出现‘collected 0 items’提示的问题
解决pytest提示‘collected 0 items’未执行测试用例的问题
核心问题
你把测试逻辑写在了pytest fixture装饰的函数里,但fixture的作用是提供测试依赖(比如初始化浏览器、准备测试数据),pytest不会把fixture函数识别为测试用例。pytest仅会自动识别以test_开头的函数(或类中以test_开头的方法)作为测试用例。
修正方案
方案一:直接修改测试函数命名(简单场景)
去掉@pytest.fixture()装饰器,将函数名改为test_前缀,让pytest识别为测试用例:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.edge.service import Service import pytest def test_wrong_login(): website = 'https://www.saucedemo.com' path = "/Users/Bernardo Cabrera/PycharmProjects/Project/resource/msedgedriver.exe" options = webdriver.EdgeOptions() options.add_experimental_option("Detach", True) service = Service(executable_path=path) driver = webdriver.Edge(service=service) driver.get(website) driver.implicitly_wait(5) driver.maximize_window() username= driver.find_element(By.XPATH, '//*[@id="user-name"]') password= driver.find_element(By.XPATH, '//*[@id="password"]') login= driver.find_element(By.XPATH, '//*[@id="login-button"]') username.send_keys("username") password.send_keys("password") login.click() badicon = driver.find_element(By.CLASS_NAME, 'error-button') assert badicon.is_displayed() driver.save_screenshot('FailedLogin') driver.quit() # 测试完成后关闭浏览器,避免资源泄漏
方案二:抽离Fixture复用依赖(推荐多测试场景)
将浏览器初始化逻辑抽离为独立的fixture,测试函数通过参数调用fixture,这样多个测试用例可以复用浏览器实例:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.edge.service import Service import pytest @pytest.fixture() def driver(): website = 'https://www.saucedemo.com' path = "/Users/Bernardo Cabrera/PycharmProjects/Project/resource/msedgedriver.exe" options = webdriver.EdgeOptions() options.add_experimental_option("Detach", True) service = Service(executable_path=path) driver = webdriver.Edge(service=service) driver.get(website) driver.implicitly_wait(5) driver.maximize_window() yield driver # 返回driver给测试用例,测试执行完后执行后续代码 driver.quit() # 自动关闭浏览器 def test_wrong_login(driver): username= driver.find_element(By.XPATH, '//*[@id="user-name"]') password= driver.find_element(By.XPATH, '//*[@id="password"]') login= driver.find_element(By.XPATH, '//*[@id="login-button"]') username.send_keys("username") password.send_keys("password") login.click() badicon = driver.find_element(By.CLASS_NAME, 'error-button') assert badicon.is_displayed() driver.save_screenshot('FailedLogin')
额外检查点
- 测试文件命名需符合pytest规则:文件名以
test_开头(如test_login.py)或以_test.py结尾 - 执行pytest时确保在正确目录,或指定测试文件路径,比如:
pytest test_login.py -v
内容的提问来源于stack exchange,提问作者Bernardo Cabrera
相关产品推荐
相关产品推荐

