pytest框架学习——大纲

import pytest
pytest落地
一、准备阶段
    pip install pytest
    命名规范
    执行方式
        pycharm右击执行
        使用main函数
        执行命令行
            -s:打印信息
            -v:更详细的信息
            -m:执行标签
            -x:遇到错误停止
            --maxfail=2:错误超过两次就停止
            -k:通过关键字执行
            --help:帮助

二、独立脚本封装
    封装之前的准备:
        先在普通脚本中调通之后再进行封装
    错误异常处理:
        抛出异常:
            try:
                print('')
            except:
                print('')
            finally:
                print('异常后的处理')
        修改脚本的检查点
    脚本优化:
        前置方法
            setup:分为下面四个级别
                _function:针对方法级别的,所有的方法执行之前都会执行一遍
                _method:此级别是执行所有的方法之前都需要执行一遍:只针对类里面的方法
                _class:此级别是在执行脚本之前只需要执行一遍,只针对class里面的方法
                _model:所有的方法都只执行一次,不管在不在类里面
        后置方法
            teardown:也分为四个级别
                _function:
                _method: 此级别是执行所有的方法之后都需要执行一遍
                _class: 此级别是在执行脚本之后只需要执行一遍
                _model:
        数据标签
            @pytest.mark.parametrize('a,b,c',([1,2,3],[5,2,1]))

三、业务脚本封装
    独立无序:
    独立有序:
        默认按照ASCLL码进行执行
        @pyest.mark.run(order=1)  #需要导入import ordering库
            按照roder数值大小来控制执行顺序
        @pytest.mark.skip('说明')  #跳过这个参数
        @pytest.mark.skipif(con=='猫眼',reason='不执行')  #根据条件跳过,需要在脚本最上方赋值con
    关联+传递独立参数:
        @pytest.fixture():
            放在需要参数话的方法上面就可以。
            调用的时候只需把参数化的方法直接引用就可以(不要加“()”)
            如果需要使用其他文件中的方法/类,需要引入:from 文件路径.文件名 import 方法名
        全局变量:
            通过配置文件实现:conftest.py:一般放在根目录
            配置文件的方法想要使用直接调用方法名就可以
                在当前脚本内部需要传递参数用@pytest.fixture(),偶发性使用其他脚本参数,可以引入该文件用@pytest.fixture()。
                或者使用普通函数方法传递@pytest.mark.parametrize()
                若是大批量的脚本需要使用的方法或数据,可以使用conftest.py公用文件,直接引用就可以
        可以使用全局变量:globals_list(需要放在脚本最上方)
    关联+传递多个参数:
        一样是使用@pytest.fixture(),只是方法输出的值是列表或者字典之类的包含多个值

四、公共配置
    使用pytest.ini文件
        [pytest]
        markers=
            mo:这是第一个标签
        addopts=-vs -s
        testpaths=文件夹路径

五、DDT技术
    数据结构:
        列表
        字典
        json串
    文件:
        txt
            打开TXT文件:
            file = open('文件', 'r', encoding='utf-8')
            读取文件:
            file.read()
            写入文件内容
            file1 = open('文件', 'aw')
            file1.write('内容')
            关闭文件:
            file.close()
            file1.close()
        csv
            导入类库
                    import csv
                打开csv文件
                    #打开文件
                    file = open('D:\\test.csv','r')
                读取csv文件
                    #定义一个列表
                    data = []
                    # 读文件
                    txt = csv.reader(file)
                    #跳过首行
                    txt.__next__()
                    #取出内容
                    for i in txt:
                        print(type(i[1]),i[1])
                        # 内容放入一个列表中,方便引用
                        data.append(i[1])
                    print(data)
                写入csv文件
                    file02 = open("文件",'ab')
                    writers = csv.writer(file02)
                    writers.writerows('需要写入的内容最好是列表')
                关闭csv文件
                    file1.close()
                    file02.close()
        excel
            导入类库
            import pandas as pd
            第一次使用需要安装pandas库和xlrd库
            读取Excel
            file03 = pd.read_excel('文件路径')
            提取相应行
            cle = file03.loc[[1, 2]].values  # 读取跳过首行的第1行或第2行,从0开始计算行数
            提取相应列
            list1 = file03['列名'].values  # 获取到的类型是<class 'numpy.ndarray'>,需要我们转换为list使用

    数据库:
        导入类库
                import pymysql
            数据库链接
                conn = pymysql.connect(
                    host="",  # 域名
                    port=int(3306),  # 端口号,需要是整形
                    user='',  # 用户名
                    password='',  # 密码
                    db='',  # 链接的库名称
                    charset='utf8'  # 如果查询有中文需要指定数据库编码,此处的编码是utf8不是utf-8
                )
            数据库访问
                cursor = db.cursor()
            提取内容
                cursor.execute('SQL命令')
                # 获取查询结果。cur.fetchall()
                response = cur.fetchall()
                #更改数据库信息:
                cur.execute("SQL命令")
                # 提交更改数据,修改的数据必须提交才能生效
                conn.commit()
                # 回滚所有操作:
                conn.rollback()  # 回滚所有更改(注意用的是conn)
                # 4、使用完成之后需要关闭游标和链接
            关闭数据库链接
                cur.close()  # 关闭游标
                conn.close()  # 关闭链接

六、测试报告
    HTML报告
        pytest 本身自带html格式的测试报告
        导入类库:pytest-htnl
        生成测试报告:pytest --html=文件名.html
    allure可视化报告:
        安装库:allure
        生成测试结果文件:pytest --allureders=测试结果文件路径
        生成报告:allure serve 测试结果文件路径(生成直接打开)
        生成报告到本地:allure generate 测试结果文件路径
七、日志