Python教程之pytest命令行方式运行用例

前言

用命令行方式调用用例是我们最常用的方式,这方面确实比java的TestNG框架要好用许多,至少不用写xml文件,为了提供定制化运行用例的方式,pytest提供了许多运行命令以供定制化运行某一类测试用例或者某个测试用例等;

pycharm里命令行运行用例

在pycharm里写好了测试用例后如何运行呢?pycharm里好像并没有像eclipse里提供TestNG用的插件一样可以一键执行的方式,那么我们可以使用命令行的方式来进行,如下图所示为一个用例文件:

代码如下:

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

28

29

30

#-*- coding: utf-8 -*-

import pytest

class Test_simple():

    @pytest.mark.test

    def test_case1(self):

        print("testCase1")

        tof = True

        assert tof

    @pytest.mark.normal

    @pytest.mark.test

    def test_case2(self):

        print("testCase2")

        tof = False

        assert tof

    def test_case3(self):

        print("testCase3")

        assert True

    @pytest.mark.test

    def setup_class(self):

        print("用于test组")

    @pytest.mark.normal

    def setup_class(self):

        print("用于normal组")

如上所示添加了一个名为testSimple的工程,内添加了一些测试用例即Test_simple;

想要运行用例时可以打开下方的Terminal窗口:

 

会自动切换到当前工程目录下,而后即可使用pytest的命令了,如下对运行结果简单做下说明:

 

终端中使用pytest

在终端中使用pytest也是和在pycharm中类似,如下以windows系统为例:

先切换到用例所在工程或者目录而后运行pytest即可,如下:

linux系统中也是同样的使用方法,只是如果没有为pytest添加软连接,则需要在pytest前面加上python命令;

用例全部运行

全部运行时不需要添加任何后缀,只需要添加命令pytest即可,此时打印的信息比较简单:

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

28

E:\pyspace\testSimple>pytest

========================================================================================================================= test session starts ==========================================================================================================================

platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0

rootdir: E:\pyspace\testSimple

plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3

collected 3 items                                                                                                                                                                                                                                                      

testcase\Test_simple.py .F.                                                                                                                                                                                                                                       [100%]

=============================================================================================================================== FAILURES ===============================================================================================================================

________________________________________________________________________________________________________________________ Test_simple.test_case2 ________________________________________________________________________________________________________________________

self = <testcase.Test_simple.Test_simple object at 0x00000000038508D0>

    @pytest.mark.normal

    @pytest.mark.test

    def test_case2(self):

        print("testCase2")

        tof = False

>       assert tof

E       assert False

testcase\Test_simple.py:18: AssertionError

------------------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------------------

testCase2

================================================================================================================== 1 failed, 2 passed in 0.08 seconds ==================================================================================================================

E:\pyspace\testSimple>

打印详情-v

如上图所示,只显示了用例时成功还是失败,至于里边的log则没有打印,那么如果我们想要看运行详细信息怎么办呢?可以加上-v标签,如下:

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

28

29

30

31

32

E:\pyspace\testSimple>pytest -v

========================================================================================================================= test session starts ==========================================================================================================================

platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe

cachedir: .pytest_cache

metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'}

rootdir: E:\pyspace\testSimple

plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3

collected 3 items                                                                                                                                                                                                                                                      

testcase/Test_simple.py::Test_simple::test_case1 PASSED                                                                                                                                                                                                           [ 33%]

testcase/Test_simple.py::Test_simple::test_case2 FAILED                                                                                                                                                                                                           [ 66%]

testcase/Test_simple.py::Test_simple::test_case3 PASSED                                                                                                                                                                                                           [100%]

=============================================================================================================================== FAILURES ===============================================================================================================================

________________________________________________________________________________________________________________________ Test_simple.test_case2 ________________________________________________________________________________________________________________________

self = <testcase.Test_simple.Test_simple object at 0x000000000382EDA0>

    @pytest.mark.normal

    @pytest.mark.test

    def test_case2(self):

        print("testCase2")

        tof = False

>       assert tof

E       assert False

testcase\Test_simple.py:18: AssertionError

------------------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------------------

testCase2

================================================================================================================== 1 failed, 2 passed in 0.08 seconds ==================================================================================================================

E:\pyspace\testSimple>

如上图会把详细信息都打印出来

指定组别

如果用例中包含多个分组,想要只运行其中一个组,则使用-m "组名"的方式,依然使用如上代码,运行命令和结果如下:

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

28

E:\pyspace\testSimple>pytest -s -m "normal"

========================================================================================================================= test session starts ==========================================================================================================================

platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0

rootdir: E:\pyspace\testSimple

plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3

collected 3 items / 2 deselected / 1 selected                                                                                                                                                                                                                          

testcase\Test_simple.py 用于normal组

testCase2

F

=============================================================================================================================== FAILURES ===============================================================================================================================

________________________________________________________________________________________________________________________ Test_simple.test_case2 ________________________________________________________________________________________________________________________

self = <testcase.Test_simple.Test_simple object at 0x00000000036D27F0>

    @pytest.mark.normal

    @pytest.mark.test

    def test_case2(self):

        print("testCase2")

        tof = False

>       assert tof

E       assert False

testcase\Test_simple.py:18: AssertionError

================================================================================================================ 1 failed, 2 deselected in 0.07 seconds ================================================================================================================

E:\pyspace\testSimple>

使用表达式指定某些用例-k

-k选项允许我们设置表达式来运行某些用例,如下传参就只运行了test_case1和test_case2

1

2

3

4

5

6

7

8

9

10

11

E:\pyspace\testSimple>pytest -v -k "case1 or case2"

========================================================================================================================= test session starts ==========================================================================================================================

platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe

cachedir: .pytest_cache

metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'}

rootdir: E:\pyspace\testSimple

plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3

collected 3 items / 1 deselected / 2 selected                                                                                                                                                                                                                          

testcase/Test_simple.py::Test_simple::test_case1 PASSED                                                                                                                                                                                                           [ 50%]

testcase/Test_simple.py::Test_simple::test_case2 FAILED                                                                                                                                                                                                           [100%]

表达式的写法有许多,可以用全称如test_case1这样也可以去掉test_,除了or外也可以使用not来指定那些用例不跑;

遇到失败即停止运行-x

pytest的原本运行规则是每条用例均执行,不管是否有失败,如果我们想在用例运行时遇到失败即停止,则可以使用-x,如下所示,第二条用例失败后则不再运行第三条用例:

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

28

29

30

31

E:\pyspace\testSimple>pytest -v -x

========================================================================================================================= test session starts ==========================================================================================================================

platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe

cachedir: .pytest_cache

metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'}

rootdir: E:\pyspace\testSimple

plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3

collected 3 items                                                                                                                                                                                                                                                      

testcase/Test_simple.py::Test_simple::test_case1 PASSED                                                                                                                                                                                                           [ 33%]

testcase/Test_simple.py::Test_simple::test_case2 FAILED                                                                                                                                                                                                           [ 66%]

=============================================================================================================================== FAILURES ===============================================================================================================================

________________________________________________________________________________________________________________________ Test_simple.test_case2 ________________________________________________________________________________________________________________________

self = <testcase.Test_simple.Test_simple object at 0x00000000037A9B00>

    @pytest.mark.normal

    @pytest.mark.test

    def test_case2(self):

        print("testCase2")

        tof = False

>       assert tof

E       assert False

testcase\Test_simple.py:18: AssertionError

------------------------------------------------------------------------------------------------------------------------- Captured stdout call -------------------------------------------------------------------------------------------------------------------------

testCase2

================================================================================================================== 1 failed, 1 passed in 0.08 seconds ==================================================================================================================

E:\pyspace\testSimple>

指定运行某个测试py文件

指定运行某个py文件,只需要接上文件相对路径即可:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

E:\pyspace\testSimple>pytest -v testcase/Test_example.py

========================================================================================================================= test session starts ==========================================================================================================================

platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe

cachedir: .pytest_cache

metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'}

rootdir: E:\pyspace\testSimple

plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3

collected 1 item                                                                                                                                                                                                                                                       

testcase/Test_example.py::Test_example::test_aaa PASSED                                                                                                                                                                                                           [100%]

======================================================================================================================= 1 passed in 0.02 seconds =======================================================================================================================

E:\pyspace\testSimple>

指定运行某个class

写法为:py文件路径::class名称,范例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

E:\pyspace\testSimple>pytest -v testcase/Test_example.py::Test_example2

========================================================================================================================= test session starts ==========================================================================================================================

platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe

cachedir: .pytest_cache

metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'}

rootdir: E:\pyspace\testSimple

plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3

collected 1 item                                                                                                                                                                                                                                                       

testcase/Test_example.py::Test_example2::test_bbb PASSED                                                                                                                                                                                                          [100%]

======================================================================================================================= 1 passed in 0.08 seconds =======================================================================================================================

E:\pyspace\testSimple>

指定运行某个方法:

写法为:py文件路径::class名称::method名称,范例如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

E:\pyspace\testSimple>pytest -v testcase/Test_example.py::Test_example2

========================================================================================================================= test session starts ==========================================================================================================================

platform win32 -- Python 3.7.1, pytest-4.4.1, py-1.8.0, pluggy-0.11.0 -- e:\software\python\python3.7\python.exe

cachedir: .pytest_cache

metadata: {'Python': '3.7.1', 'Platform': 'Windows-7-6.1.7601-SP1', 'Packages': {'pytest': '4.4.1', 'py': '1.8.0', 'pluggy': '0.11.0'}, 'Plugins': {'metadata': '1.8.0', 'html': '1.20.0', 'allure-pytest': '2.6.3'}, 'JAVA_HOME': 'D:\\project\\jdk1.8'}

rootdir: E:\pyspace\testSimple

plugins: metadata-1.8.0, html-1.20.0, allure-pytest-2.6.3

collected 1 item                                                                                                                                                                                                                                                       

testcase/Test_example.py::Test_example2::test_bbb PASSED                                                                                                                                                                                                          [100%]

======================================================================================================================= 1 passed in 0.08 seconds =======================================================================================================================

E:\pyspace\testSimple>

如上几种也可以组合使用;

其他

pytest还包含许多其他用法,具体用法可以使用pytest --help来查看,如下:

 

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值