首页 > 解决方案 > 如何从命令行为 python 脚本选择变量?

问题描述

我需要为不同的环境(不同的 url)运行 python 测试脚本。我需要从命令行定义使用哪个变量。将来,此参数将用于 Jenkins 工作。

脚本.py:

class TestLogin(unittest.TestCase):

    @allure.step
    def test_LoginValidation(self):

        devURL = "http://url1/admin/login/"
        stagingURL = "http://url2/admin/login/"
        prodURL = "https://url3/admin/login"

        driver.maximize_window()
        driver.implicitly_wait(10)
        driver.get(url)

        lp = LoginPage(driver)
        lp.login("login", "password")


        time.sleep(2)
        driver.quit()

在命令行中我需要写

python script.py stagingURL

结果, 在 driver.get(url)中的方法test_LoginValidation中将使用我在命令行中定义的 url。

标签: pythonjenkinsjobsargs

解决方案


您可以使用它argparse来执行此操作:

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Description')

    parser.add_argument('--dev',
                        dest='dev',
                        action='store_true',
                        help="Help message")

    parser.add_argument('--stage',
                        dest='stage',
                        action='store_true',
                        help="Help message")

    parser.add_argument('--prod',
                        dest='prod',
                        action='store_true',
                        help="Help message")

    parser.set_defaults(dev=True,
                        stage=False,
                        action=False)

    args = parser.parse_args()

    url = None
    if args.dev:
        url = "http://url1/admin/login/"
    if args.stage:
        url = "http://url2/admin/login/"
    if args.prod:
        url = "https://url3/admin/login"

    # do something with the url

这是一种方法。您正在创建一些 arg 参数--dev, --stage,--prod并且默认--dev设置为 true。您也可以没有默认值(只需 set dev=False)。

所以下次你可以运行:

python program.py --dev
python program.py --stage
python program.py --prod

您可能想要处理传递多个标志的情况。

你也可以这样做:

import argparse

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='Description')

    parser.add_argument("--env", 
                        choices={"dev", "stage", "prod"}, 
                        help="Some help message.")

    args = parser.parse_args()

    url = None
    if args.env == "dev":
        url = "http://url1/admin/login/"
    elif args.env == "stage":
        url = "http://url2/admin/login/"
    elif args.env == "prod":
        url = "https://url3/admin/login"
    else:
        print("Please specify the environment using --env flag.")

    if url is not None:
        print(url)

例子:

$ python3 test2.py
Please specify the environment using --env flag.

$ python3 test2.py --env prod
https://url3/admin/login

$ python3 test2.py --env stage
http://url2/admin/login/

$ python3 test2.py --env dev
http://url1/admin/login/

$ python3 test2.py --env wrong
usage: test2.py [-h] [--env {stage,dev,prod}]
test2.py: error: argument --env: invalid choice: 'wrong' (choose from 'stage', 'dev', 'prod')

argparse 您可以在此处阅读更多信息。


推荐阅读