pytest 自动化学习

这篇具有很好参考价值的文章主要介绍了pytest 自动化学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一  pytest简介与安装

二  Pytest 命令规则

三  pycharm配置与界面化运行

四  pytest测试用例结构

五  Pytest 测试用例断言

六 Pytest 测试框架结构

七  pytest参数化用例

八  Pytest 标记测试用例

九   Pytest 设置跳过、预期失败用例

十  运行用例

十一 测试用例调度与运行

十二 常用命令行参数

十三  Python 代码执行 pytest

十四 Pytest 异常处理

十五  数据驱动-yaml

十六  pytest数据驱动-excel

十七 Pytest结合数据驱动csv

十八  Pytest结合数据驱动json


一  pytest简介与安装

pytest 自动化学习

def inc(x):
return x+1

def test_answer():
assert inc(3) == 5 #判断 4会不会等5

二  Pytest 命令规则

pytest 自动化学习

三  pycharm配置与界面化运行

pytest 自动化学习

 pytest 自动化学习

 pytest 自动化学习

 pytest 自动化学习

Pytest简介以及常用插件安装
1.pytest是一个非常成熟的单元测试框架。灵活和简单
2.它可以结合selenium,requests,appium完成各种不同的自动化
3.它还可以生成自定义allure报告以及和Jenkins持续集成
4.pytest有很多强大的插件

pytest
pytest-html(生成html报告的插件)
pytest-xdist(多线程运行的插件)
pytest-ordering(改变用例的执行顺序的插件 )
pytest-rerunfailres( 失败用例重跑的插件)
allure-pytest(生成美观自定义的allure报告)

pytest默认测试用例的规则以及基础应用
1.模块名必须以test_开头或者_test结尾。
⒉测试类必须以Test开头,并且不能带有init方法。
3.测试用例必须以test_开头。



四  pytest测试用例结构

用例结构
三部分构成
      1.用例名称用例步骤                2.编辑                 3.断言

 pytest 自动化学习

 pytest 自动化学习

 pytest 自动化学习

五  Pytest 测试用例断言

pytest 自动化学习

def test_a():
    a = 1
    b = 2
    expect = 3
    assert a + b == expect

pytest 自动化学习


def test_str():
    assert  "abc" in "abcd"  # abcd 是否包含在 abc 里面 

def test_plat():
    assert ('linux' in sys.platform) ,"该代码不在 linux 下运行"  #直接报我写的这个错误

六 Pytest 测试框架结构

pytest 自动化学习

pytest 自动化学习

七  pytest参数化用例

pytest 自动化学习

 pytest 自动化学习

import pytest

search_list =['appium']

# 单参数  的第一个名字 ,第一个如果有多的数字可以放在列表里面
# 第一个是变量名字,第二个是 序列
@pytest.mark.parametrize('name',search_list)

def test_search(name):
    assert name in search_list
import pytest

#1、参数化的名字,要与方法中的参数名,——对应,
#2、如果传递多个参数的话,要放在列表中,列表中嵌套列表/元组
@pytest.mark.parametrize("test_input,expected",[
    ("3+5",8),("2+5",7),("7+5",12)   #不能有空格
])

def test_mark_more(test_input,expected):
    assert eval(test_input) == expected
# 用例重用名

import pytest

#1、参数化的名字,要与方法中的参数名,——对应,
#2、如果传递多个参数的话,要放在列表中,列表中嵌套列表/元组
#3.ids 的个数==传递的数据个数
@pytest.mark.parametrize("test_input,expected",[
    ("3+5",8),("2+5",7),("7+5",12)
],ids=["number1","number2","number3"])  #ids用于重命名

def test_mark_more(test_input,expected):
    assert eval(test_input) == expected

 pytest 自动化学习

 pytest 自动化学习

  

八  Pytest 标记测试用例

pytest 自动化学习

 pytest 自动化学习

pytest 自动化学习pytest 自动化学习 

 pytest 自动化学习

 pytest 自动化学习

九   Pytest 设置跳过、预期失败用例

pytest 自动化学习

 pytest 自动化学习

  

import sys

import pytest

# skip 用法
@pytest.mark.skip    #里面的所有内容被跳过
def test_aaa():
    print("里面的所有内容被跳过,不显示,用于开发代码未开发完,代码没有实现")
    assert True

@pytest.mark.skip(reson =" 代码没有被实现") # 写备注
def test_bbb():
    assert False


# 代码里面 添加,跳过代码块 putest.skip(reson="")
def check_login():
    return True


def test_function():
    print("start")
    # 如果没有登入,就跳过后续步骤
    if not check_login():
        # 如果没有登入执行下面的的语句被跳过
        pytest.skip("unsupported configuration")
    print("end")

# skipif 用法
#  sys.platform 版本系统,如果是 mac 系统 希望在 mac系统 跳过
@pytest.mark.skipif(sys.platform == 'darwin',reason=" does not run on mac ")
def test_case1():
    assert True

#  sys.platform 版本系统,win 系统,希望在 win 系统 跳过
@pytest.mark.skipif(sys.platform == 'win',reason=" does not run on mac ")
def test_case2():
    assert True

#  sys.platform 版本系统,puthon 版本系统 希望在 python 3.6 几的版本 跳过
@pytest.mark.skipif(sys.version_info < (3,6),reason=" requires python3.6 or higher ")
def test_case3():
    assert True

 pytest 自动化学习

import pytest


# xfail 只是起到一个提示的作用,如果成功就回提示,跳过语句
@pytest.mark.xfail
def test_aaa():
    # 如果成功 提示 XPASS 失败提示 XFAIL
    print("test_xfail1 方法执行")

xfail = pytest.mark.xfail

@xfail(reason="bug 110")
def test_hello4():
    assert 0

def test_xfail():
    print("** 开始测试 ** ")
    pytest.xfail(reason="该功能没有完成") # 后面的不执行
    print("测试过程")
    assert 1 == 1

@pytest.mark.xfail
def test_aaa():
    print("test_xfail1 方法执行")
    print("测试过程2")
    assert 1 == 2

十  运行用例

pytest 自动化学习

pytest 自动化学习

 pytest 自动化学习

十一 测试用例调度与运行

pytest 自动化学习

十二 常用命令行参数

pytest 自动化学习

 1. pytest test_demo1.py -v 
 2.  pytest test_demo1.py -v --maxfail=3 

 3.  pytest test_demo1.py -v -k "str"   # 运行标题包含 str 的用例 

 4.  pytest test_demo1.py -v -k  "not  str"    # 运行标题不包含 str 的用例 

 5.  pytest test_demo1.py -k "not big" -v -s   # 打印日志 

 6.  pytest --collect-only

十三  Python 代码执行 pytest

pytest 自动化学习

 pytest 自动化学习

 pytest 自动化学习

 pytest 自动化学习

 pytest 自动化学习

python -m pytest test_demo1.py

十四 Pytest 异常处理

常用的异常处理方法
1. try...except
2. pytest.raises()
 

pytest 自动化学习


try:
a = int(input("除数: "))
b = int(input("被除数: "))
c = a / b
print(" c 的结果是 ",c)

except(ValueError,ArithmeticError):
print("程序发生意外,算数的异常")
except:
print("都有异常")

print("程序继续运行")

异常处理方法 pytest.raise()
可以捕获特定的异常
● 获取捕获的异常的细节(异常类型,异常消息)

● 发生异常,后面的代码将不会被执行

 pytest 自动化学习

import pytest

# 如果有发生错误,下面的代码不会运行
def test_raise():
    with pytest.raises((ZeroDivisionError,ValueError)):
        # raise ValueError("value must be 0 or None")
        raise ZeroDivisionError(" 除数未0 ")

def test_raise1():
    with pytest.raises(ValueError) as exc_info:
        raise ValueError("Value must be 42")

    assert  exc_info.type is ValueError
    assert exc_info.value.args[0] == "value must be 41"

十五  数据驱动-yaml

简介


     数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。简单来说,就是参数化的应用。数据量小的测试用例可以使用代码的参数化来实现数据驱动,数据量大的情况下建议大家使用一种结构化的文件(例如yaml,json等)来对数据进行存储,然后在测试用例中读取这些数据
 

应用场景
   App、Web、接口自动化测试

     1.测试步骤的数据驱动
     2.测试数据的数据驱动。配置的数据驱动
 

pytest 自动化学习

import  pytest
import yaml


class Testdemo3:
    @pytest.mark.parametrize("evn",yaml.safe_load(open("./evn.yml")))
    def test_demo(self,evn):
        if "test" is evn:
            print("测试环境")
            print("测试环境的IP 是 "+evn["test"])
        elif "dev" is evn:
            print("这个是开发环境")
            print("测试环境的IP 是 " +evn["dev"])

    def test_yaml(self):
        print(yaml.safe_load(open("./evn.yml")))

十六  pytest数据驱动-excel

pytest 自动化学习

 https://openpyxl.readthedocs.io/en/stable/

 openpyxl库的安装
   1. 安装:pip install openpyxl 

    2.导入:import openpyxl

pytest 自动化学习


import openpyxl

# 获取工作谱
book = openpyxl.load_workbook('params.xlsx')

# 获取工作表
sheet = book.active

# 获取单元格数据
a_1 = sheet['A1'].value
print(a_1)

c_3 = sheet.cell(column=3,row=3).value
print("c_3",c_3)

# 获取多个单元格
cells = sheet["A1":"C3"]
# 这个是一个集合的元素,可以打印他的类型
print(type(cells),cells)



 pytest 自动化学习

 pytest 自动化学习

 pytest 自动化学习

 pytest 自动化学习

import openpyxl
import pytest

from utils.data.operation import my_add




def get_excel():
        # 获取工具谱
        book = openpyxl.load_workbook('params.xlsx')
        # 获取工作表 [1,1,2][3,6,9][100,200,300]
        sheet = book.active
        #读取取单元格数据
        cells = sheet["A1":"C3"]
        print(cells)
        values = []
        for row in cells:
            data =[]
            for cell in row:
                data.append(cell.value)
            values.append(data)

        return values



class TestWithEXCEL:
    @pytest.mark.parametrize('x,y,expected',get_excel())
    def test_add(self,x,y,expected):
        assert my_add(int(x),int(y))  == int(expected)

十七 Pytest结合数据驱动csv

pytest 自动化学习

import  csv

def get_csv():
    with open('democsv.csv','r',encoding='utf-8') as file:
        raw = csv.reader(file)

        for line in raw:
            print(line)

if __name__ == '__main__':
    get_csv()

pytest 自动化学习

 pytest 自动化学习

def my_add(x,y):
    result = x + y
    return result




import csv

import pytest

from utils.data.operation import my_add

def test_get_csv():
    with open('paramsdemo.csv',encoding='utf-8') as file:
        raw =csv.reader(file)

        data = []
        for line in raw:
            data.append(line)

        print(data)

    return data



class TestWithCSV:
    @pytest.mark.parametrize('x,y,expected',test_get_csv())
    def test_add(self,x,y,expected):
        assert my_add(int(x),int(y)) == int(expected)

pytest 自动化学习

十八  Pytest结合数据驱动json

pytest 自动化学习

import  json

def get_json():
    with open('json.json','r',encoding='utf-8') as file:
        data = json.loads(file.read())
        print(data,type(data))

        # 同时使用ensure_ascii=False参数确保输出的JSON字符串中的非ASCII字符(例如中文字符)被正确编码。转换后的 JSON 字符串存储在变量s中。
        s = json.dumps(data,ensure_ascii=False)
        print(s)
        print(type(data))


if __name__ == '__main__':
    get_json()

pytest 自动化学习文章来源地址https://www.toymoban.com/news/detail-499343.html

到了这里,关于pytest 自动化学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WebUI自动化学习(Selenium+Python+Pytest框架)003

    在成功定位到元素之后,我们需要对元素进行一些操作动作。常用的元素操作动作有:                键盘动作:向浏览器发送一个内容,通常用于输入框输入内容或向浏览器发送快捷键                 鼠标左键单击,通常用于点击按钮                 清空内容,通

    2024年02月04日
    浏览(52)
  • 【码尚教育】Python自动化测试框架pytest—入门学习笔记

    目录 前言 一、pytest单元测试框架 二、 单元测试框架和自动化测试框架有什么关系 三、pytest简介 四、使用pytest默认的测试用例规则及基础应用 五、pytest测试用例的运行方式 六、pytest执行测试用例的顺序 七、如何分组执行​编辑 八、pytest跳过用例 九、pytest框架实现的一些

    2023年04月12日
    浏览(46)
  • 测开新手:pytest+requests+allure自动化测试接入Jenkins学习

    2024软件测试面试刷题,这个小程序(永久刷题),靠它快速找到工作了!(刷题APP的天花板) 最近在这整理知识,发现在pytest的知识文档缺少系统性,这里整理一下,方便后续回忆。 在python中,大家比较熟悉的两个框架是unittest和pytest: Unittest是Python标准库中自带的单元测

    2024年02月01日
    浏览(53)
  • 【UI自动化测试技术】自动化测试研究:Python+Selenium+Pytest+Allure,详解UI自动化测试,学习模拟鼠标+模拟键盘进行相关操作(精)(四)

    1、了解元素交互的常用方法 2、学习如何对多选元素进行操作 3、 学习模拟鼠标进行相关操作 ( 本节目标 ) 4、 学习模拟键盘进行相关操作 ( 本节目标 ) 用于向 Web 浏览器提供虚拟化设备输入操作的低级接口.除了刚刚讲过的Web元素交互之外, Actions 接口 还提供了对指定输

    2024年03月24日
    浏览(84)
  • 从0到1精通自动化测试,pytest自动化测试框架,配置文件pytest.ini(十三)

    pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行 pytest里面有些文件是非test文件 pytest.ini pytest的主配置文件,可以改变pytest的默认行为 conftest.py 测试用例的一些fixture配置 _init_.py 识别该文件夹为python的package包

    2024年02月11日
    浏览(94)
  • python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

    经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索 天气查询 ,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接口测试用例脚本。 针对某个功能做接口测试,首先我们需

    2024年02月04日
    浏览(52)
  • pytest自动化框架运行全局配置文件pytest.ini

    还记得在之前的篇章中有讲到Pytest是目前主要流行的自动化框架之一,他有基础的脚本编码规则以及两种运行方式。 pytest的基础编码规则是可以进行修改,这就是今日文章重点。 看到这大家心中是否提出了两个问题:pytest的基础编码规则在哪可以修改?又是如何修改? 让我

    2024年02月09日
    浏览(53)
  • Pytest自动化测试

    目录 一、Pytest如何安装 二、Pytest如何编写用例 三、Pytest如何运行用例 四、Pytest如何实现参数化 五、Pytest如何跳过和标记用例 六、Pytest如何失败重执行 七、Pytest如何使用夹具 八、Pytest如何进行夹具共享 九、Pytest如何设置夹具作用域 Pytest是Python中最流行的自动化测试框架之

    2024年02月02日
    浏览(36)
  • 【Pytest实战】Pytest+Allure+Jenkins自动化测试框架搭建

    😄作者简介: 小曾同学.com,一个致力于测试开发的博主⛽️,主要职责:测试开发、CI/CD 如果文章知识点有错误的地方,还请大家指正,让我们一起学习,一起进步。😊 座右铭:不想当开发的测试,不是一个好测试✌️。 如果感觉博主的文章还不错的话,还请点赞、收藏哦

    2024年02月15日
    浏览(60)
  • pytest 框架自动化测试

    随笔记录 目录 1. 安装  2. 安装pytest 相关插件 2.1 准备阶段 2.2 安装  2.3 验证安装成功  3. pytest测试用例的运行方式 3.1 主函数模式 3.1.1 主函数执行指定文件  3.1.2 主函数执行指定模块 3.1.3 主函数执行某个文件中的某个类、方法、函数 3.1.4 主函数执行生成allure报告 3.2 命令

    2024年02月19日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包