当前位置:   article > 正文

Python自动化测试Pytest_python自动化测试代码

python自动化测试代码

Pytest框架简介

1. 介绍

Pyttest是Python的一个三方单元测试框架,相比与unitest更家简洁高效
编写好测试脚本
自动执行测试用例
自动生成测试报告

2. 环境搭建

install pytest
  • 1

Pytest使用方法

1. 使用规则

  • .py测试文件必须以test(test_xxx)开头(或者以_test结尾)
  • 测试类必须以Test开头,并且不能有init方法-----测试类Test开头
  • 测试方法必须以test_开头
  • 断言必须使用assert
    当然也可以通过配置pytest.ini文件进行配置,修改,以上知识该框架默认模式
import pytest#导包
def test_learn():
    print('测试方法以test_开头')
    assert 1
def test_learn2():
    print('第二条测试用例也')
if __name__=='__main__':
    pytest.main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

以test开头会显示一个这个图行
在这里插入图片描述

2. 执行测试用例

一些详细参数

-s:输出调试信息,包括print打印的信息。
-v:显示更详细的信息。
-n=num:启用多线程或分布式运行测试用例。
-k=value:用例的nodeid包含value值则用例被执行。
-m=标签名:执行被 @pytest.mark.标签名 标记的用例。
-x:只要有一个用例执行失败就停止当前线程的测试执行。
–maxfail=num:与-x功能一样,只是用例失败次数可自定义。
–reruns=num:失败用例重跑num次。需要安装 pytest-rerunfailures 插件模块。

主函数
pytest.main()

if __name__=='__main__':
    pytest.main()
  • 1
  • 2

在这里插入图片描述

命令模式

pytest -参数 文件名
在这里插入图片描述
执行指定的测试用例

pytest -sv 用例文件名 ::文件中的测试函数名
  • 1

在这里插入图片描述

3. setup()与teardown()使用

setup()可以理解为前置条件,用例在执行前需要的操作
teardown用例执行完后所进行的操作

1:setup_module和teardown_module,在整个测试用例所在的文件中所在的文件中所有的方法运行前和运行后运行,只运行一次—模块的
  2:setup_class和teardown_class,在整个测试文件中的一个class中所有的用例的签后运行 ----class类
  3:setup_method和teardown_method,在class内的每个方法运行前运行 ---------方法的
  4:setup_function和teardown_function,在非class下属的每个测试方法的前后运行 ----函数的分层分级(不同级别有不同方法)

setup(),teardown()写在类外,则是以类为单位执行前后

import pytest#导包
def setup():
    print('前置条件')
class Test_login:
    # def setup_method(self):
    #     print('方法中的前置条件---')
    # def teardown_method(self):
    #     print('方法中的后置运行---')
    def test_learn(slef):
        print('第一条case')
        assert 1+1==2
    def test_learn2(self):
        print('第二条case')
def teardown():
    print('后置条件')
class Test_register:
    def test_c1(self):
        print('register中的1哦')

if __name__=='__main__':
    pytest.main(['-s'])

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

结果:在这里插入图片描述

4. fixtures(夹具)使用

  1. 做测试前后的初始化设置,如测试数据准备,链接数据库,打开浏览器等这些操作都可以使用fixture来实现
  2. 测试用例的前置条件可以使用fixture实现
  3. 支持经典的xunit fixture ,像unittest使用的setup和teardown
  4. fixture可以实现unittest不能实现的功能,比如unittest中的测试用例测试用例之间是无法传递参数和数据的,但是fixture却可以解决这个问题
    定义
    函数+装饰器
    使用范围
    默认函数function
    类class
    模块module
    包package
    会话(session)
    == @pytest.fixture(scope=“”,autouse=),scope表示的是范围==

5. mark使用

mark中使用run来设置用例的执行顺序
注意需要安装:pip install pytest-ordering,不然不起作用哦
mark中的skip()表示跳过该条用例
在这里插入图片描述
运行结果:在这里插入图片描述
skipif()条件跳过
还有一个跳过skipif()条件跳过,里面有参数,需要满足什么条件可以跳过,同时也可以写跳过的原因reason=“***”

在这里插入代码片
  • 1
  1. 函数数据参数化parametrize()
    将测试数据与测试用例分离
    使用方法如下代码:
import pytest#导包

class Test_login:
    # 多个数据参入
    @pytest.mark.parametrize(['user', 'info'], [('user1', '是一名学生'), ('user2', '是一名职场人员')])
    def test_learn(slef,user,info):
        print(f'用户{user},信息{info}')
        assert 1+1==2
    # 单个数据参入
    @pytest.mark.parametrize('score',[20,30])
    def test_learn2(self,score):
        print(f'你的分数分别为{score}')
    # 数据参数是属于字典型
    data=({'name':'明明','age':18
          },
          {'name':'聪聪','age':19})
    @pytest.mark.parametrize('data',data)
    def test_learn3(self,data):
        print(f'你的名字叫{data["name"]},你的年龄是{data["age"]}')

if __name__=='__main__':
    pytest.main(['-s'])

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

结果如下图
在这里插入图片描述

6. allure生成测试报告

这里就记录一个漂亮的数据报告库Allure,其他的就不记录了
环境准备,安装allure-pytest

 pip install allure-pytest -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
 
  • 1
  • 2

下载allurehttps://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.13.2/
在这里插入图片描述
环境配置参考一个网友分享教程
配置成功:
在这里插入图片描述

1. allure-pytest使用命令

pytest.main([])

-m标记用例
–alluredir生成Allure指定语法
./report生成报告目录
–clear-alluredir清除report文件夹里的东西

2. 定值化报告

feature 标注主要功能模块
story 标注feature功能模块下的分支功能
severity 标注测试用例的重要级别如下:
( blocker级别 致命缺陷
critical级别 严重缺陷
normal级别 一般缺陷,默认这个缺陷
minor级别 次要缺陷
trivial级别 轻微缺陷)
Step 标注测试用例的重要步骤
Attach 用于向测试报告中输入一些附件信息,通常是一些测试数据信息;

使用操作代码如下:

import pytest,allure
@allure.feature('登录模块主要功能')
class Test_login:
    @allure.story('模块中,输入用户信息功能')
    @allure.step('输入用户密码与账号')
    @allure.severity('blocker')
    def test_login1(self):
        print('用户名与用户密码')
        assert 0
    @allure.step('点击操作')
    def test_login2(self):
        print('点击登录')
        assert 1
if __name__=='__main__':
    pytest.main(['-s','-q','--alluredir','./report'])

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

运行完后,会生成一个report的文件夹
在这里插入图片描述
接着切换该目录下终端输入生成报告命令:
在这里插入图片描述
就生成allure-report目录
运行即可在这里插入图片描述
效果图如下:
在这里插入图片描述
还有哦
在这里插入图片描述
可视化
在这里插入图片描述
当然还有,你们可以自己去尝试一下哦

Selenium+Pytest实战

自动化测试登录与退出功能

大致步骤:
获取登录接口
调用谷歌浏览器驱动
向登录接口发送请求
输入用户信息
点击登录
页面跳转
等待一下
关闭浏览器
有更好的代码宝子们可以分享,这是入门刚刚尝试,
代码如下:

import pytest,allure,time
from selenium import webdriver
from selenium.webdriver.common.by import By
# @allure.feature('模块====登录与退出')
# 准备数据,这里就有1条是正确的,2条是错误的账号
data=({"user":'======',"password":'cjm19991121'
},{"user":'1273104934@qq.',"password":'cjm19991121'
},{"user":'1273104933@qq.com',"password":'cjm19991121'
})
@pytest.mark.parametrize('data',data)

class TestUser:
    # @allure.step('1.调用浏览器驱动')
    # @allure.step('2.输入接口http')
    # @allure.step('3.输入用户名信息')
    # @allure.step('4.点击登录')
    # @allure.step('5.登录成功,截图')
    def setup_method(self):
        with allure.step('打开浏览器'):
            self.driver=webdriver.Chrome()
        with allure.step('输入登录网址'):
            self.driver.get('http://127.0.0.1:5000/user/login')
    def teardown_method(self):
        with allure.step('关闭浏览器'):
            time.sleep(5)
            self.driver.quit()
    def test_login(self,data):
        with allure.step('输入用户名与密码'):
            # print(data['user'])
            self.driver.find_element(By.NAME,'email').send_keys(data['user'])
            self.driver.find_element(By.NAME,'pwd').send_keys(data['password'])
        with allure.step('点击登录'):
            self.driver.find_element(By.XPATH,'/html/body/div/div[2]/form/button').click()
        time.sleep(5)
        assert self.driver.title=='首页'

if __name__=='__main__':
    pytest.main(['-s','-q','--alluredir','./report'])
    # pytest.main(['-s'])
  • 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
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

结果图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后续更新哈,欢迎指点,提供思路

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/958100
推荐阅读
相关标签
  

闽ICP备14008679号