【问题标题】:Appium; py.test; python; Same tests for two apps with different package names苹果; py.test; Python;对具有不同包名称的两个应用程序进行相同的测试
【发布时间】:2016-05-19 15:29:39
【问题描述】:

我正在测试必须以 2 种方式构建的应用程序,包括每日构建、并行构建等。这个特定的应用程序需要一个使用假 API 构建,第二个使用真实后端构建。

目前我已将所有测试标记为:

@sanity
@real
@fake
def test_TC101_first_time_use(self):

并为每个构建运行特定的测试(一些测试必须为两个版本启动,有些只能在其中一个上启动)。

今天开发者更改了虚假 API 版本的包名,以便可以同时安装两个版本。

问题:是否可以让我的代码依赖于当前测试的版本?

例如,如果测试由以下方式启动:py.test -v -m "real" 运行测试:

desired_caps['appPackage'] = 'com.companyname.appname'
self.driver.find_element_by_id("com.companyname.appname:id/button").click()

但是当测试开始时:py.test -v -m "fake" 运行测试:

desired_caps['appPackage'] = 'com.companyname.appname_fake'
self.driver.find_element_by_id("com.companyname.appname_fake:id/button").click()

我已尝试查找如何执行此操作的信息,但没有找到任何特定(且快速/简单)的方法来解决此问题。我希望有人可以帮助我。

编辑: 作为一种解决方法,我使用简单的 bash 脚本在开始测试之前替换 *.py 文件中的所有名称,但我仍然想知道这是否有可能以其他方式进行。

【问题讨论】:

    标签: python appium pytest ui-testing


    【解决方案1】:

    在 pytest 中,您可以根据命令行专门测试。 您将需要在 conftest.py 中使用 addoption() 例如: def pytest_addoption(解析器): parser.addoption("--all", action="store_true", help="运行所有组合")

    更多细节解释见: http://pytest.org/latest/example/parametrize.html

    【讨论】:

    • 感谢您的回复。我实际上看到了这种方法,但坦率地说尝试使用它失败了。 Atm 我在 Jenkins 上使用 ${PACKAGE_NAME} 和变量注入,工作正常,但这不是没有问题的解决方案。如果有更多时间,我会再次尝试使用该参数化。
    • 我用过 pytest_addoption() 效果很好。
    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多