python - 如何从命令行为 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。
解决方案
您可以使用它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
您可以在此处阅读更多信息。
推荐阅读
- machine-learning - 无序数据的神经网络架构
- ios - 无法渲染和更新自动布局状态,无法启动可设计代理,因为工具正在关闭
- php - Woocommerce:将订单状态设置为在扫描 QR 码(包含订单 ID)时完成
- python - 为什么检查变量是否存在比复制应该是 O(1) vs O(n) 操作的数组花费更多时间?
- reactjs - 我正在尝试在 github 页面上部署我的静态反应应用程序,但我得到了白屏
- python - Python SQL cursor/fetch:数据库查询何时完成运行?
- laravel - 使用非默认保护登录后,我的尝试()函数传递了“真”但没有获得 auth()-user() 参数,因此无法启动会话
- c# - 在 EF Core 中使用现有子实体创建新实体
- node.js - 如果租借的书没有按时自动归还,MongoDB / Mongoose如何申请罚款?
- javascript - 您可以使用 file_get_contents() 在 PHP 中同时读取文件吗?