本文章会讲述以下几个内容:
1,Unittest 如何跳过用例
2, 如何使用 sys.argv
3, 自动化测试项目中如何一套代码多套环境运行
一, Unittest 跳过用例
@unittest.skip(reason) , 直接跳过被装饰的用例 ,reason 用于填写跳过用例的原因
@unittest.skipIf(condition, reason) , condition 如果为真, 跳过被装饰的用例, reason 用于填写跳过用例的原因
@unittest.skipUnless(condition, reason) , condition 如果为假, 跳过被装饰的用例, reason 用于填写跳过用例的原因
例:
test_case_skip.py
- # encoding:utf8
- import unittest
- class SkipExample(unittest.TestCase):
- @unittest.skip('用例 1 无条件跳过')
- def test_case_one(self):
- print('--- 用例 1 ---')
- @unittest.skipIf(2> 1, '条件为 True , 用例 2 跳过')
- def test_case_two(self):
- print('--- 用例 2 ---')
- @unittest.skipUnless(2 < 1, '条件为 False, 用例 3 跳过')
- def test_case_three(self):
- print('--- 用例 3 ---')
- if __name__ == '__main__':
- unittest.main(verbosity=2)
运行结果:
- test_case_one (__main__.SkipExample) ... skipped '用例 1 无条件跳过'
- test_case_two (__main__.SkipExample) ... skipped '条件为 True , 用例 2 跳过'
- test_case_three (__main__.SkipExample) ... skipped '条件为 False, 用例 3 跳过'
二, 如何使用 sys.argv
sys.argv 是一个数组 第一个元素是程序本身路径
sys.argv 实现从程序外部向程序传递参数.
例:
how_to_use_argv.py
- #encoding:utf8
- from sys import argv
- print('argv 是一个数组:',argv)
使用命令行运行上述脚本, 外部传入参数: 1 2 3 4
python how_to_use_argv.py 1 2 3 4
运行结果
argv 是一个数组: ['how_to_use_argv.py', '1', '2', '3', '4']
小结:
sys.argv 实现从程序外部向程序传递参数
传入的第一个参数为脚本文件名
传入程序的每一个参数以空格 隔开
传入程序的参数均以字符串的类型存储, 命令行中不需要加引号
三, 自动化测试项目中如何一套代码多套环境运行
需求 1: 一套代码可以测试多个环境, 不希望每次测试不同环境的时候都要去改代码里面的 URL, 希望把代码里面的 URL 参数化
以 UI 自动化为例:
test_multiple_env.py
- # encoding:utf8
- from selenium import webdriver
- from sys import argv
- import unittest
- from time import sleep
- class TestEnv(unittest.TestCase):
- def setUp(self):
- self.url = argv[-1]
- print(self.url)
- self.driver = webdriver.Chrome()
- def test_load_page(self):
- self.driver.get(self.url)
- sleep(10)
- if __name__ == '__main__':
- suit = unittest.TestSuite()
- suit.addTest(TestEnv('test_load_page'))
- runner = unittest.TextTestRunner()
- runner.run(suit)
运行命令行:
python test_multiple_env.py https://www.baidu.com/
运行结果:
打开浏览器, 导航到百度页面
需求 2: 有些用例不能在预发布环境或者生产环境运行, 怎么跳过该用例
UI 自动化为例:
test_multiple_env_skip.py
- # encoding:utf8
- from selenium import webdriver
- from sys import argv
- import unittest
- from time import sleep
- URL = argv[-1]
- print('argv[-1] :', URL)
- class TestEnv(unittest.TestCase):
- def setUp(self):
- self.driver = webdriver.Chrome()
- @unittest.skipIf(URL != 'https://www.baidu.com' ,'不是百度首页的 URL, 跳过用例 test_load_page')
- def test_load_page(self):
- self.driver.get(URL)
- sleep(10)
- if __name__ == '__main__':
- suit = unittest.TestSuite()
- suit.addTest(TestEnv('test_load_page'))
- runner = unittest.TextTestRunner(verbosity=2)
- runner.run(suit)
运行命令行:
python test_multiple_env_skip.py www.testclass.com
运行结果:
- argv[-1] : www.baidu.com
- test_load_page (__main__.TestEnv) ... skipped '不是百度首页的 URL, 跳过用例 test_load_page'
- ----------------------------------------------------------------------
- Ran 1 test in 0.001s
- OK (skipped=1)
小结
从上面的例子可以了解, 如何通过 sys.argv 传入环境参数, 虽然上文是用百度首页作为例子, 但同时引出, 我们在做自动化测试时候, 实现一套代码多环境运行思路
命令行带参数启动脚本, 在 Unittest 中, 可以实现不同的测试环境可以跳过用例
GitHub 源码地址:
https://github.com/SEtester/how_to_run_test_case
来源: https://www.cnblogs.com/snailrunning/p/10125596.html