前言
在利用单元测试框架执行测试用例的过程中,有时只需要执行一部分用例,或者跳过某些暂不需要执行的用例,python的unittest框架就内置这样的功能。
本文章会讲述以下几个内容:
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 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
1
2
3
4
|
#encoding:utf8
from sys import argv
print ( 'argv是一个数组:' ,argv)
|
使用命令行运行上述脚本,外部传入参数:1 2 3 4
1
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
# 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)
|
运行命令行:
1
|
python test_multiple_env.py https: / / www.baidu.com /
|
运行结果:
打开浏览器,导航到百度页面
需求2:有些用例不能在预发布环境或者生产环境运行,怎么跳过该用例
UI自动化为例:
test_multiple_env_skip.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# 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)
|
运行命令行:
1
|
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.001sOK (skipped=1)
小结
从上面的例子可以了解,如何通过sys.argv传入环境参数,虽然上文是用百度首页作为例子,但同时引出,我们在做自动化测试时候,实现一套代码多环境运行思路
命令行带参数启动脚本,在Unittest中,可以实现不同的测试环境可以跳过用例
Github 源码地址:https://github.com/SEtester/how_to_run_test_case
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:https://www.cnblogs.com/snailrunning/p/10125596.html