python习题#讲解13参数化讲解

python习题#讲解13参数化讲解,第1张

1.先了解项目目录架构

        测试框架
       目录结构
       python package类文件夹:1.api        2.scripts        3.common
       directory类文件夹:1.data        2.report
       项目根目录文件:1.config.py        2.pytest.ini

2.参数化步骤

1)api文件夹中封装登录.py

#登录
import requests#导包
class Ihrmlogin(object):#封装登录类
    @classmethod#类方法
    def login(cls,json):#封装登录方法
        rep= requests.post("http://ihrm-test.itheima.net/api/sys/login",json= json)
        return rep#发送登录请求返回登录数据

2)data文件夹中放参数化数据.json

[
  {
    "desc": "登陆成功",
    "req_data": {
      "mobile": "13800000002",
      "password": "123456"
    },
    "status_code": 200,
    "success": true,
    "code": 10000,
    "message": " *** 作成功"
  },
  {
    "desc": "手机号未注册",
    "req_data": {
      "mobile": "11777771111",
      "password": "123456"
    },
    "status_code": 200,
    "success": false,
    "code": 20001,
    "message": "用户名或密码错误"
  },
  {
    "desc": "密码错误",
    "req_data": {
      "mobile": "13800000002",
      "password": "12345678"
    },
    "status_code": 200,
    "success": false,
    "code": 20001,
    "message": "用户名或密码错误"
  },
  {
    "desc": "多参",
    "req_data": {
      "mobile": "13800000002",
      "password": "123456",
      "abc": "123"
    },
    "status_code": 200,
    "success": true,
    "code": 10000,
    "message": " *** 作成功"
  },
  {
    "desc": "少参",
    "req_data": {
      "mobile": "13800000002"
    },
    "status_code": 200,
    "success": false,
    "code": 20001,
    "message": "用户名或密码错误"
  },
  {
    "desc": "无参",
    "req_data": null,
    "status_code": 200,
    "success": false,
    "code": 99999,
    "message": "系统繁忙"
  }
]

2.1)data文件夹中也可以用w写入json数据.py

# my_list = [{"desc": "正确的用户名和密码", "username": "admin", "password": "123456", "code": "8888", "expect": "登录成功"},
  {"desc": "用户名不存在", "username": "root", "password": "123456", "code": "8888", "expect": "登录失败"},
  {"desc": "错误的密码", "username": "admin", "password": "123123", "code": "8888", "expect": "登录失败"}]#定义数据
# with open(D + '/data/add_data2.json', 'w',encoding='utf-8') as f:
#     json.dump(my_list, f, ensure_ascii=False)#w写入文件

3)根目录下建立绝对路径文件config.py

import  os
D=os.path.dirname(__file__)
# D自定义根目录

4)common文件夹中封装共用读取2)json文件.py调用3)路径

import json#导包json
from config import D#导包绝对路径D
#定义读取json的方法定义filename形参用于调用传参
def Radd_data(filename):
    with open(filename, encoding='utf-8') as file:
        data_list = json.load(file) # json默认r读取文件
        # json.load读取加载的数据赋值给变量名data_list
        new_list = []#创建空列表
        for my_dict in data_list:#for循环遍历列表得到字典
            # 字典.values()得到键值并转元组
            my_tuple = tuple(my_dict.values())
            new_list.append(my_tuple)#将得到数据的元组添加给新空列表
        return new_list#返回得到数据的列表值
if __name__ == '__main__':
        print(Radd_data(D + '/data/login_data.json'))  # 打印调用类并传参

5)common文件夹中封装断言.py

def common_assert(reps, status_code, success, code, message):
    assert status_code == reps.status_code
    assert success is reps.json().get("success")
    assert code == reps.json().get("code")
    assert message in reps.json().get("message")

6)scripts文件夹中编写测试用例导包封装的文件实现参数化验证和断言创建.py文件

import pytest#导入测试插件@pytest
from api.ihrm01_fzdl import Ihrmlogin#导包封装接口
from common.assert_tool import common_assert#导入共用断言
from common.readlogin_dataw import Radd_data#导入共用读取json数据工具
from config import D#导入绝对路径

class Testihrmlogcsh:
    read_json=Radd_data(D + '/data/login_data2.json')#读入存储.json数据
    @pytest.mark.parametrize('desc,req_data,status_code,success,code,message',read_json)
    def test01log(self,desc,req_data,status_code,success,code,message):#登录形参
        reps = Ihrmlogin.login(req_data)  # 发送登录请求方法reps
        print(desc,reps.json())  # 查看请求结果
        common_assert(reps,status_code,success,code,message)#断言响应

1)api文件夹中封装增删改查 *** 作.py文件

#增删改查
import requests
from common.Tonken import logintoken
zsgheader = {"Authorization": logintoken()}  # 定义请求头
class Ihrmzsg(object):
    @classmethod
    def addyg(cls,ttbody):
        ttresp = requests.post(url="http://ihrm-test.itheima.net/api/sys/user", headers=zsgheader, json=ttbody)
        return  ttresp
        # print("添加员工", ttresp.json())

    @classmethod
    def xgyg(cls,zsgid,xgbody):
        xgresp = requests.put(url="http://ihrm-test.itheima.net/api/sys/user/"+zsgid, headers=zsgheader, json=xgbody)
        return xgresp
        # print("修改员工", xgresp.json())

    @classmethod
    def cxyg(cls,zsgid):
        cxresp = requests.get(url="http://ihrm-test.itheima.net/api/sys/user/"+zsgid, headers=zsgheader)
        return cxresp
        # print("查询员工", cxresp.json())

    @classmethod
    def scyg(cls,zsgid):
        scresp = requests.delete("http://ihrm-test.itheima.net/api/sys/user/"+zsgid, headers=zsgheader)
        return scresp
        # print("删除员工", scresp.json())

2)common文件夹中封装断言.py文件

def common_assert(reps, status_code, success, code, message):
    assert status_code == reps.status_code
    assert success is reps.json().get("success")
    assert code == reps.json().get("code")
    assert message in reps.json().get("message")

3)common文件夹中封装登录后生成的用户令牌.py文件调用登录封装1)

from api.ihrm01_fzdl import Ihrmlogin

def logintoken():
    dl_body = {"mobile": "13800000002", "password": "123456"}  # 定义请求体
    dlreq = Ihrmlogin.login(dl_body)  # 发送登录请求
    return dlreq.json().get("data")  # 通过登录拿到令牌值

4)data文件夹中放添加员工参数化数据.json

[
  {
    "desc": "新增成功",
    "req_data":{"username": "hzb", "mobile": "18888966698", "workNumber": "123412412412"},
    "status_code": 200,
    "success": true,
    "code": 10000,
    "message": " *** 作成功"
  },
  {
    "desc": "手机号空",
    "req_data": {"username": "hzb", "mobile": null, "workNumber": "123412412412"},
    "status_code": 200,
    "success": false,
    "code": 20002,
    "message": "新增员工失败"
  },
  {
    "desc": "无参",
    "req_data": null,
    "status_code": 200,
    "success": false,
    "code": 99999,
    "message": "系统繁忙"
  }]

5)根目录下建立绝对路径文件config.py

import  os
D=os.path.dirname(__file__)
# D自定义根目录

6)common文件夹中封装共用读取4)json文件.py调用5)路径

import json#导包json
from config import D#导包绝对路径D
#定义读取json的方法定义filename形参用于调用传参
def Radd_data(filename):
    with open(filename, encoding='utf-8') as file:
        data_list = json.load(file) # json默认r读取文件
        # json.load读取加载的数据赋值给变量名data_list
        new_list = []#创建空列表
        for my_dict in data_list:#for循环遍历列表得到字典
            # 字典.values()得到键值并转元组
            my_tuple = tuple(my_dict.values())
            new_list.append(my_tuple)#将得到数据的元组添加给新空列表
        return new_list#返回得到数据的列表值
if __name__ == '__main__':
        print(Radd_data(D + '/data/login_data.json'))  # 打印调用类并传参

7) api文件夹中封装数据库接口增删改查 *** 作.py文件

import pymysql


class DBUtil(object):
    @classmethod
    def get_conn(cls):#定义连接
        conn = pymysql.connect(host='211.103.136.244', port=7061, user='student', password='iHRM_student_2021',database='ihrm', charset='utf8')
        return  conn
    @classmethod

    def select_one(cls,sql):#查询一条
        conn= None
        cursor= None
        res= None
        try:
            conn=cls.get_conn()#创建连接
            cursor = conn.cursor()#获取游标
            cursor.execute(sql)#执行程序sql
            res = cursor.fetchone()#获取结果
        except Exception as e:#异常捕捉
            print(e)#打印异常
        finally:
            cursor.close() # 6.关闭游标
            conn.close()# 7.关闭连接
            return res#返回res数据

    @classmethod
    def select_many(cls,sql,i):#查询多条
        cls.i=i
        conn = None
        cursor = None
        res = None
        try:
            conn = cls.get_conn()  # 创建连接
            cursor = conn.cursor()  # 获取游标
            cursor.execute(sql)  # 执行程序sql
            res = cursor.fetchmany(i)  # 获取结果
        except Exception as e:  # 异常捕捉
            print(e)  # 打印异常
        finally:
            cursor.close()  # 6.关闭游标
            conn.close()  # 7.关闭连接
            return res  # 返回res数据

    @classmethod
    def  uid_db(cls,sql):
        conn = None
        cursor = None
        try:
            conn = cls.get_conn()  # 创建连接
            cursor = conn.cursor()  # 获取游标
            cursor.execute(sql)  # 执行程序sql
            conn.commit()
            print("提交事务成功")
            print("影响⾏数:", conn.affected_rows())
        except Exception as e:  # 异常捕捉
            print(e)  # 打印异常
            conn.rollback()
            print("回滚事务")
        finally:
            cursor.close()  # 6.关闭游标
            conn.close()  # 7.关闭连接

8)scripts文件夹中编写测试用例导包封装的文件实现参数化验证和断言创建.py文件

import pytest#导入测试插件@pytest
from api.sql_05fzihrm import DBUtil#导包mysql数据库uid
from common.assert_tool import common_assert#导入共用断言
from api.ihrm02_fzzsg import Ihrmzsg#导包增删改员工接口
from common.readlogin_dataw import Radd_data#导入共用读取json数据工具
from config import D#导入绝对路径

class Testihrmput:
    def setup_class(self):
        print('1.走在测试类class前面删除记录')#类前删除一条记录
        DBUtil.uid_db("delete from bs_user where mobile='18888966698'")
    read_json = Radd_data(D + '/data/ihrmygtt.json')#读入存储.json数据
    @pytest.mark.parametrize('desc,req_data,status_code,success,code,message', read_json)
    def testput01(self,desc,req_data,status_code,success,code,message):#添加形参
        reqq=Ihrmzsg.addyg(req_data)#发送添加员工请求
        print(desc,reqq.json())  # 查看请求结果
        common_assert(reqq,status_code,success,code,message)#断言响应

9)根目录下建立report文件夹用于存放测试报告

10)根目录下建立测试报告路径文件名等代码pytest.ini

[pytest]
addopts=-s --html=report/test01_report.html
testpaths=./scripts
python_files=test*.py
python_classes=Test*
python_functions=test*

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/922782.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存