自动化测试用例要怎么写

news/2024/7/21 5:12:10 标签: 软件测试, python, excel

自动化测试用例要怎么写

  自动化测试, 不是测试功能,可不可用。 而是一个流程上有没有问题,能不能通过。
  上一片说了, 接口的测试用例, 不用像功能测试用例那样, 一个功能写N多个测试点, 因为用自动化测试一个功能的所有情况, 相当费时间.
  接口的测试用例, 其实就写一个功能的主要功能, 或者是影响流程的多个功能,

  说的在详细点, 就是 比如审核功能, 通过, 和退回两个功能, 退回需要填写审核意见 。
  那我们的用例就 只要 有两个, 1 是通过,2 是退回加审核意见。(不用写退回然后不写审核意见能不能过,想写的话也随意,就是费点时间。)
点关注的图片
  !!!

测试用例

这是我用的测试用例, 期中每一步操作, 都给出测试数据,用来在系统上添加一个商品,然后一大堆操作,因为不是讲测试点,就是给出一个用例来意思意思,我就不多说,想表达的意思打达到了就好了。
在这里插入图片描述

读取测试用例的脚本

  这个是关键,上面那个很明显是用 excel 写的要怎么给程序使用呢下面就要写一下了。
我是用 python 脚本写的, 如果看不懂 python 的语言,可以自学, 也可以私信我。

python"># -*- coding:utf-8 -*-
import json
import os
import re
import threading
from datetime import datetime
from json import JSONDecodeError

import openpyxl
import xlrd
from openpyxl.styles import NamedStyle, PatternFill
from xlrd import xldate_as_tuple
# 这下面的,是我自己写的几个工具方法,可以给出来,但是需要其他组件
# xls_dict 是一个 dict 可以用来修改文件中的一些数据
#  my_pow  封装了 pow()函数
from config.XLS_DICT import xls_dict, my_pow   

# logger 日志输出组件,可以替换成 print()
from utils.Logger_util import logger

# execute_sel_sql_return_one 查询数据库的,如果没有可以 写一个空的
from utils.Mysql_util import execute_sel_sql_return_one
 
# file_isexists输出文件的时候, 判断文件是否已经存在
from utils.basics_util import file_isexists

# object_dir 一个 str 保存的是路径
from variable.basics_var_class import object_dir

xls_dict 是一个 dict 可以用来修改文件中的一些数据

要隆重介绍一下这个变量, 别小看他,他可是决定了文件数据转化
比如说,审核接口, 通过,接口传给后台的是1 ,退回是2,但是用例里面, 你能写1,或者2 吗?要写通过,退回。
代码这样写

python">xls_dict = { 
	“审核结果”:{
		"通过":1,
		"退回":2,
		"":1 # 最后这个是默认值,可以不写
	}
}

用例这样写
在这里插入图片描述
运行后的结果:

python">res = [{"审核结果":1,"oid_审核结果":"通过"},{"审核结果":2,"oid_审核结果":"退回"}]

源码:下载文件:Read_File_Util.py
(傻笑,要两金币才可以下载!)

在这里插入图片描述
可以看到, 第一行变成了每一个list里边的 key,value 保存的是通过xls_dict 保存的值。还多了一个 oid开头的,保存着文件原本的数据。(注意,key不要写错了,哪怕多了一个空格都算是错的。)

python"># 这个文件中 最主要的的一个函数,
	@classmethod
    def read_file(cls, file_name,mode_key):
        cls.set_mode_key(mode_key)
        read_work_book = xlrd.open_workbook(file_name)
        sheet_names = read_work_book.sheet_names()
        cls.read_files(file_name,["全局变量"],mode_key)
        cls.read_files(file_name,sheet_names,mode_key)
        cls.get_ref_data(mode_key)
        return cls.get_data(mode_key)
python">	@classmethod
    def __read_file(self, file_name, sheet_name):

        """

        :param file_name: xlsx 文件名称 (绝对路径)
        :param sheet_name:
        :return:
        """
        read_work_book = xlrd.open_workbook(file_name)
        read_sheet = read_work_book.sheet_by_name(sheet_name)
        row_num = read_sheet.nrows
        col_num = read_sheet.ncols
        cell_values = read_sheet._cell_values
        cell_values_list = []
        for rd in range(1, len(cell_values)):
            keys = cell_values[0]
            values_dict = {}
            for vl in range(len(keys)):
                # 判断 数据中, 是否有需要引用的数据
                # 无法进行处理, 先进行记录
                if "ref{" in str(cell_values[rd][vl]):
                    self.set_ref_data_log(sheet_name,rd-1,keys[vl])
                # 引用数据记录
                if "{{" in str(cell_values[rd][vl]) and "}}" in str(cell_values[rd][vl]):
                    var_data = {"mode": sheet_name, "rd": rd-1, "vl": keys[vl]}
                    cell_values[rd][vl] = self.get_var_data(self.get_mode_key(),var_data,cell_values[rd][vl])
                # xls_dict 变量数据转换
                if keys[vl] in xls_dict.keys(): # 就是为什么说 错了一个空格都对不上的原因
                    values_dict[self.__switch_code + keys[vl]] = cell_values[rd][vl]
                    values_dict[keys[vl]] = self.data_switch(cell_values[rd][vl], keys[vl])
                else:
                    values_dict[keys[vl]] = cell_values[rd][vl]
            if values_dict != {}:
                cell_values_list.append(values_dict)

        return cell_values_list

上面代码中, 可以看到 有很多 if 在

if “ref{” in str(cell_values[rd][vl]):

ref{}是用来引用本文件中,其他sheet 的中的数据:被应用的sheet 要有一列 第一行是 sheet 的页面

	"""
            ref{sheet}   			此 sheet 的全部数据
            ref{sheet#1} 			此 sheet 的序号 = 1 的
            ref{sheet#1,2,3,4}		此 sheet 的序号 = 1,2,3,4 的
            ref{sheet#1_4}			此 sheet 的序号 = 1到4 的
            ref{sheet#1_4,6}		此 sheet 的序号 = 1到4 和 6 的
            ref{sheet#1_4,6_7}		此 sheet 的序号 = 1到4 和 6到7 的
            ref{sheet1#1;sheet2#1}	读取多个 sheet 的序号 = 1 的 #号后面其他雷同
        """

被引用的 sheet 页中的内容
在这里插入图片描述

if “{{” in str(cell_values[rd][vl]) and “}}” in str(cell_values[rd][vl]):

{{key_name}} 用来引用 sheet “全局变量” 中的数据, 要申明一下, 被读取的文件中要有一个 sheet_name = 全局变量的sheet页 。

在这里插入图片描述
好啦 就写这些了, 下载了,不会用的,可以私信我, 我会100%给你们解答! !!
点关注的图片
  !!!


http://www.niftyadmin.cn/n/1429488.html

相关文章

自动化测试用例要怎么写_实际使用方式

自动化测试用例要怎么写_实际使用方式 上一章 <自动化测试用例要怎么写> 介绍了这个文件主要功能, 还有文件的源码已经公开了(后期略微有一点点优化过, 没有上传, 需要的私信我! ! ! ) 前言 这一章&#xff0c;主要介绍Excel 文件的编写方式&#xff0c; 以及需要注意的…

java MyBatis 最轻量级 总结

java MyBatis 最轻量级 总结求关注&#xff01;&#xff01;&#xff01; 本人在 没啥事的时候, 看了一下 java MyBatis 然后总结出了一点点 相关的笔记, 有需要的拿去!!! 不需要的, 路过就行 ! ! ! 一… 新建项目不管你是 用 idea, 还是 用 其他的 java 编辑器, 都是 需要一个…

MobaXterm Sftp 超时自动退出问题

客户超时自动关闭连接 修改MobaXterm 的配置,将超时自动退出关闭 服务器关闭连接导致Sftp关闭 编辑 /etc/ssh/sshd_config 文件 vim /etc/ssh/sshd_config# 保持 tcp 连接活跃 Keep 保持 Alive 活跃 TCPKeepAlive yes # Client Alive 活跃 Interval 间隔 # 多长时间 向客…

Spring boot 集成 Redis Scarch

Spring boot 集成 Redis Scarch 代码太多了, 不想写两遍了, 我这里给出一个连接, 大家过去看吧! https://www.yuque.com/docs/share/52ae3f18-610a-494e-975a-ae802f0e67f8?# 《(九) Redis Search on Spring boot》

Java泛型详解—绝对是对泛型方法讲解最详细的,没有之一!

1. 概述 泛型在java中有很重要的地位&#xff0c;在面向对象编程及各种设计模式中有非常广泛的应用。 什么是泛型&#xff1f;为什么要使用泛型&#xff1f; 泛型&#xff0c;即“参数化类型”。一提到参数&#xff0c;最熟悉的就是定义方法时有形参&#xff0c;然后调用此方…

趣图:程序员得到一份新工作后

趣图&#xff1a;IT培训出来找工作 趣图&#xff1a;程序猿和运维狗的工作日常…… 微信公众号&#xff1a;javafirst 扫码关注免费获取更多资源

Spring Boot实战:Restful API的构建

在现在的开发流程中&#xff0c;为了最大程度实现前后端的分离&#xff0c;通常后端接口只提供数据接口&#xff0c;由前端通过Ajax请求从后端获取数据并进行渲染再展示给用户。我们用的最多的方式就是后端会返回给前端一个JSON字符串&#xff0c;前端解析JSON字符串生成JavaSc…

Java中几种常用的RPC框架介绍

RPC是远程过程调用的简称&#xff0c;广泛应用在大规模分布式应用中&#xff0c;作用是有助于系统的垂直拆分&#xff0c;使系统更易拓展。Java中的RPC框架比较多&#xff0c;各有特色&#xff0c;广泛使用的有RMI、Hessian、Dubbo等。RPC还有一个特点就是能够跨语言&#xff0…