我用一个新的更简单的假设置重新创建了这个问题。我有一个框架需要来自pytest的命令channel变量。此变量称为环境,但当我尝试访问该变量时,我得到一个AttributeError:“模块”对象没有属性“配置”。这是我的测试设置:我知道py.test按以下顺序加载:Pytest插件外部插件conftest.py文件,从外层文件到内层文件。我想我遇到了一个问题,当我加载内部conftest.py时,我尝试导入框架。当我导入框架时,它会尝试访问py.test变量。这个变量,即使pytest已经在我的outer-conftest.py的pytest_addoption()部分中看到它,还没
我有一些使用pytest和fixtures编写的测试,例如:classTestThing:@pytest.fixture()deftemp_dir(self,request):my_temp_dir=tempfile.mkdtemp()deffin():shutil.rmtree(my_temp_dir)request.addfinalizer(fin)returnmy_temp_dirdeftest_something(self,temp_dir)withopen(os.path.join(temp_dir,'test.txt'),'w')asf:f.write('test')这在从
如何从配置了参数化的集合中运行单个测试?假设我有以下测试方法:@pytest.mark.parametrize(PARAMETERS_LIST,PARAMETERS_VALUES)deftest_my_feature(self,param1,param2,param3):"""testdoc"""ifparam1=='value':assertTrueelse:print'notvalue'assertFalse我有3个参数,我为它们生成了一个包含15个不同可能值的列表,以测试函数。我怎样才能只运行其中一个?除了显而易见的方式-给出单个值而不是15。 最佳答
是否可以仅在特定标记上使用autouse=True来阻止“功能范围”固定装置的执行?我将以下装置设置为自动使用,以便自动模拟所有传出请求:@pytest.fixture(autouse=True)defno_requests(monkeypatch):monkeypatch.setattr("requests.sessions.Session.request",MagicMock())但是我有一个名为endtoend的标记,我用它来定义一系列测试,这些测试允许发出外部请求以进行更稳健的端到端测试。我想在所有测试(绝大多数)中注入(inject)no_requests,但不会在如下测试中
我是djangounittest和pytest的新手。但是,我开始觉得pytest测试用例更简洁、更清晰。这是我的测试用例:classOrderEndpointTest(TestCase):defsetUp(self):user=User.objects.create_superuser(username='admin',password='password',email='pencil@gmail.com')mommy.make(CarData,_quantity=1)mommy.make(UserProfile,_quantity=1,user=user)deftest_get_o
我正在通过测试一个简单的事件发射器实现来学习如何使用pytest。基本上是这样的classEventEmitter():def__init__(self):...defsubscribe(self,event_map):#addslistenerstoprovidedinevent_mapeventsdefemit(self,event,*args):#emitseventwithgivenargs为了方便,我创建了一个用于测试的Listener类classListener():def__init__(self):...defoperation(self):#actuallistene
根据pytest文档,我可以断言发生了SystemExit(),但我想做更多:我还想验证退出代码和任何消息。我尝试了下面的代码,但没有打印任何内容,而且我不确定我需要断言什么来证明我得到了正确的错误代码。withpytest.raises(SystemExit):docopt_args=validate_args(docopt_args)out,err=pytest.capsys.readouterr()assertout=='Foo'printout,err当我运行测试时,它通过了,但仅此而已。没有打印任何内容,我也没有收到断言错误。我期望执行的代码是:print'\n'+docop
我想在所有测试结束时运行一个函数。一种全局拆卸功能。我找到了一个例子here和一些线索here但它不符合我的需要。它在测试开始时运行函数。我还看到函数pytest_runtest_teardown(),但它在每次测试后都会被调用。另外:如果只有在所有测试都通过后才能调用该函数,那就太好了。 最佳答案 我发现:defpytest_sessionfinish(session,exitstatus):"""wholetestrunfinishes."""exitstatus可用于定义要运行的操作。pytestdocsaboutthis
当我运行pytest--collect-only为了获得我的测试列表,我以类似的格式获取它们.但是,当我使用pytest-k...要运行特定测试,我需要以foo::test_whatever格式输入测试的“地址”.是否有可能以与-k相同的格式获取所有测试的所有地址列表?需要? 最佳答案 在conftest.py中,您可以覆盖“集合”Hook以打印有关收集的测试“项目”的信息。您可以引入自己的命令行选项(如--collect-only)。如果指定了此选项,则打印测试项目(以您喜欢的方式)并退出。下面的示例conftest.py(本地测
unittest.TestCase有一个assertCountEqualmethod(Python2中的assertItemsEqual,可以说这是一个更好的名称),它比较两个可迭代对象并检查它们是否包含相同数量的相同对象,而不考虑它们的顺序。pytest是否提供类似的东西?所有明显的替代方案(例如调用set(x)、sorted(x)或Counter(list(x))在每一侧作为文档中提到的)不起作用,因为我正在比较的是字典列表,而字典是不可哈希的。 最佳答案 pytest不提供assertCountEqual,但我们可以只使用un