【问题标题】:Python unittest - how to chose the url on which the tests are executed?Python unittest - 如何选择执行测试的 url?
【发布时间】:2018-11-11 20:41:05
【问题描述】:

我是 python 的初学者,我目前正在使用 unittest 编写一套带有 selenium webdriver 的测试用例;我也在这里找到了很多有用的答案,但是现在是时候问我的第一个问题了,我为此苦苦挣扎,找不到正确的答案,因此非常感谢您的帮助:

简而言之,我有一套多个测试用例,在每种情况下,第一步始终是 ".get('Some URL')";我已经为单个环境编写了这些测试用例,但我希望能够选择将在其上执行所有测试的 URL。在下面的示例中,我使用特定环境调用了“access_url”方法,但我需要一次为所有场景执行此操作,是否可以从执行 .py 文件的位置执行此操作(例如“python example. py")?还是在我选择要运行的套件时将其传递给 .run() 方法?

import HTMLTestRunner
from selenium import webdriver
import unittest

这是一个用于创建“access_url”方法的自定义类

def MyClass(object):
    def __init__(self, driver):
        self.driver = driver

    def access_url(self, URL):
        if URL == 'environment 1':
            self.driver.get('https://www.google.com/')
        elif URL == 'environment 2':
            self.driver.get('https://example.com/')

在我用来编写测试用例的类中,第一步总是“访问 URL”

class TestScenario01(unittest.TestCase):

    def setUp(self):
        [...]

    def test_01_access(self):
        MyClass(self.driver).access_url(URL='environment 2')

    def test_02(self):
        [...]

    def test_03(self):
        [...]

为了运行测试,我将它们全部放在一个套件中并在它们上使用 .run()

tc_scenario01 = unittest.TestLoader().loadTestsFromTestCase(TestScenario01)
test_suite = unittest.TestSuite([tc_scenario01])
HTMLReporterCustom.HTMLTestRunner().run(test_suite)

最后,为了执行脚本,我在 CMD 中键入以下行:'python example_file.py

正如我上面提到的,我要做的就是能够以某种方式将 URL 一次性传递给所有调用“access_url()”方法的测试用例。谢谢!

【问题讨论】:

    标签: python unit-testing selenium webdriver


    【解决方案1】:

    您可以在单独的配置文件中维护环境属性。

    config.py

    DEFAULT_ENVIRONMENT='environment1'
    
    URL = {
        'environment1': 'https://www.google.com/',
        'environment2': 'https://example.com/'
    }
    

    你的班级,

    from package import config
    
    def MyClass(object):
        def __init__(self, driver):
            self.driver = driver
    
        def access_url(self):
            self.driver.get(config.URL[config.DEFAULT_ENVIRONMENT])
    

    那么测试类就如预期的那样了,

    class TestScenario01(unittest.TestCase):
    
        def setUp(self):
            [...]
    
        def test_01_access(self):
            MyClass(self.driver).access_url()
    
        def test_02(self):
            [...]
    
        def test_03(self):
            [...]
    

    在运行测试时你可以改变,

    main.py

    from package import config
    
    config.DEFAULT_ENVIRONMENT = 'enviroment2'
    tc_scenario01 = unittest.TestLoader().loadTestsFromTestCase(TestScenario01)
    test_suite = unittest.TestSuite([tc_scenario01])
    HTMLReporterCustom.HTMLTestRunner().run(test_suite)
    

    您也可以在运行 python main.py 时传递环境名称。

    main.py

    if __name__ == '__main__':
        config.DEFAULT_ENVIRONMENT = sys.argv[1] if len(sys.argv) > 2 else 'dev'
    tc_scenario01 = unittest.TestLoader().loadTestsFromTestCase(TestScenario01)
    test_suite = unittest.TestSuite([tc_scenario01])
    HTMLReporterCustom.HTMLTestRunner().run(test_suite)
    

    【讨论】:

    • 这真是太优雅了!我正在研究各种复杂的解决方案,老实说,我从来没有想过将它放在一个变量中并在 .run() 方法之前更改它。我仍然在思考所有的编程概念,所以你不仅帮助了我,而且我也学到了一些东西。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    相关资源
    最近更新 更多