当前位置: 首页 > news >正文

Java+Excel+POI+testNG基于数据驱动做一个简单的接口测试【杭州多测师_王sir】

一、创建一个apicases.xlsx放入到eclipse的resource里面,然后refresh刷新一下

二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的对应目录下放入features和plugins,重启eclipse就可以看到testNG了

        <!--poi excel解析 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency><!-- https://mvnrepository.com/artifact/org.testng/testng --><dependency><groupId>org.testng</groupId><artifactId>testng</artifactId><version>6.9.8</version><scope>test</scope></dependency>

三、封装一个读取Excel表格的工具类

package com.duoceshi.test;import java.io.InputStream;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;;public class ExcelUtil1 {public static Object[][] readExcel1(String excelPath) throws Exception {InputStream is = null;Workbook workbook = null;try {is = ExcelUtil1.class.getResourceAsStream(excelPath);workbook = WorkbookFactory.create(is);Sheet sheet = workbook.getSheetAt(0);  //获取到具体的sheet//通过sheet获取行数int lastRowNum = sheet.getLastRowNum();Object[][] allData = new Object[lastRowNum][];  //创建二维数组存Excel表格数据System.out.println(lastRowNum);for (int i = 1; i <= lastRowNum; i++) {Row row = sheet.getRow(i);int lastColumn = row.getLastCellNum();Object[] objects = new Object[lastColumn];for (int j = 0; j < lastColumn; j++) {Cell cell = row.getCell(j, MissingCellPolicy.CREATE_NULL_AS_BLANK);cell.setCellType(CellType.STRING);  //把cell当成字符串处理String value = cell.getStringCellValue();System.out.println(value);objects[j] = value;}allData[i-1] = objects;}return allData;} catch (Exception e) {e.printStackTrace();} finally {is.close();workbook.close();}return null;}public static void main(String[] args) throws Exception {readExcel1("/apicases.xlsx");}}

四、通过testng创建一个testng类,引入@DataProvider数据提供者

package com.duoceshi.test;import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;import com.alibaba.fastjson.JSON;/*** 读取Excel表格数据 做数据驱动* * @author 多测师王sir**/
public class LoginTest1 {@DataProviderpublic Object[][] dp() throws Exception {Object[][] allData = ExcelUtil1.readExcel1("/apicases.xlsx");for (int i = 0; i < allData.length; i++) {Object[] objects = allData[i];for (int j = 0; j < objects.length; j++) {Object object = objects[j];System.out.println(object);}}return allData;}@SuppressWarnings("unchecked")@Test(dataProvider = "dp")public void loginTest(String url, String requestBody, String result) throws Exception {List<NameValuePair> allData = new ArrayList<NameValuePair>();LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();map = JSON.parseObject(requestBody, map.getClass());  //把字符串转换为map类型Set<String> ketSet = map.keySet();for (String key : ketSet) {String value =  map.get(key);allData.add(new BasicNameValuePair(key, value));}String requestBodyStr = URLEncodedUtils.format(allData, "utf-8");String baseUrl = url + "?" + requestBodyStr;CloseableHttpClient client =  HttpClients.createDefault();HttpPost httpPost = new HttpPost(baseUrl);CloseableHttpResponse reponseStr = client.execute(httpPost);HttpEntity httpEntity =  reponseStr.getEntity();String responseEntity = EntityUtils.toString(httpEntity);//对响应文本进行断言Assert.assertTrue(responseEntity.contains(result));System.out.println(responseEntity);}
}

五、运行输出结果:

{"code":"200","msg":"登录成功!","model":{}}
{"code":"400","msg":"登录密码不正确!","model":{}}

相关文章:

Java+Excel+POI+testNG基于数据驱动做一个简单的接口测试【杭州多测师_王sir】

一、创建一个apicases.xlsx放入到eclipse的resource里面&#xff0c;然后refresh刷新一下 二、在pom.xml文件中加入poi和testng的mvn repository、然后在eclipse的对应目录下放入features和plugins&#xff0c;重启eclipse就可以看到testNG了 <!--poi excel解析 --><d…...

2023.8.12号论文阅读

文章目录 TriFormer: A Multi-modal Transformer Framework For Mild Cognitive Impairment Conversion Prediction摘要本文方法实验结果 SwIPE: Efficient and Robust Medical Image Segmentation with Implicit Patch Embeddings摘要本文方法实验结果 TriFormer: A Multi-mod…...

R语言中的函数24:Combinat:combn(), permn()

介绍 combinat中的combn()和permn()函数可以得到所有的排列组合的情况 combn()函数 combn(x, m, funNULL, simplifyTRUE, …)x – 组合的向量源m – 要取的元素的数量fun – 应用于每个组合的函数(可能为空)simplify – 逻辑的&#xff0c;如果是FALSE&#xff0c;返回一个列…...

C++隐式调用和explicit关键字

隐式类型转换 #include <iostream> using namespace std;class Point { public:int x, y;Point(int x 0, int y 0): x(x), y(y) {} };void displayPoint(const Point& p) {cout << "(" << p.x << "," << p.y <&l…...

Git 清除所有本地修改

Git 清除所有本地修改 1. 上才艺 1. 上才艺 git reset --hard && git clean -dfreset 返回到某个节点&#xff0c;不保留修改&#xff08;删除的是已跟踪的文件&#xff09;clean 删除的是未跟踪的文件 谢谢...

快速获得图像中像素值的小工具

之前项目中为了做lka中获得rgb图像信息&#xff0c;网上大多方案是确定相关的区域然后输出像素值&#xff0c;这个方法太麻烦&#xff0c;做了一个简单的使用鼠标点击图片某区域&#xff0c;然后直接在终端输出该区域的像素值。下面是源码&#xff1a; import cv2 import matp…...

yolo数据增强

yolo数据增强 🔥 数据集说明 😂一. labelimg 😅1. labelimg数据增强2. labelimg转换为yolo数据集二. labelme 😆1. labelme 分割数据增强2. labelme分割数据集转换yolo分割数据集三. coco 数据集格式1. coco 数据集格式数据增强 并转换至labelme 格式2. coco 数据集格式…...

环保行业如何开发废品回收微信小程序

废品回收是近年来受到越来越多人关注的环保行动。为了推动废品回收的普及和方便&#xff0c;我们可以利用微信小程序进行制作&#xff0c;方便人们随时随地参与废品回收。 首先&#xff0c;我们需要注册并登录乔拓云账号&#xff0c;并进入后台。乔拓云是一个提供微信小程序制作…...

个人对哈希数据结构学习总结 -- 理论篇

个人对哈希数据结构学习总结 -- 理论篇 引言哈希表设计思考哈希冲突Hash Functions冲突解决开放地址法(Open Addressing)分离链表法(Separate Chaining)Two-way Chaining Dynamic Hash Tableschained Hashingextendible hashinglinear hashing说明 spiral storage 使用场景小结…...

在CMamke生成的VS项目中插入程序

在主文件夹的CMakeLists.tex中加入SET(COMPILE_WITH_LSVM OFF CACHE BOOL "Compile with LSVM") 再添加IF(COMPILE_WITH_LSVM) MESSAGE("Compiling with: LSVM") ADD_DEFINITIONS(-DCOMPILE_WITH_LSVM) ADD_SUBDIRECTORY(LSVM) LIST(APPEND SRC LSVM_wrap…...

198、仿真-基于51单片机函数波形发生器调幅度频率波形Proteus仿真(程序+Proteus仿真+原理图+流程图+元器件清单+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、原理图 五、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选…...

Django 初级指南:创建你的第一个 Django 项目

Django 是一个强大的 Python Web 框架&#xff0c;它采用了“模型-视图-控制器”&#xff08;MVC&#xff09;的设计模式&#xff0c;能够帮助开发者快速、简洁地创建高质量的 Web 应用。这篇文章将引导你创建你的第一个 Django 项目。 一、安装 Django 首先&#xff0c;你需…...

【MySQL】使用C++连接数据库

目录 前置工作代码常用函数接口整体示例&#xff1a; 前置工作 创建数据库并选中 mysql> create database conn; Query OK, 1 row affected (0.01 sec)mysql> show databases; -------------------- | Database | -------------------- | information_schema…...

php代码审计,php漏洞详解

文章目录 1、输入验证和输出显示2、命令注入(Command Injection)3、eval 注入(Eval Injection)4、跨网站脚本攻击(Cross Site Scripting, XSS)5、SQL 注入攻击(SQL injection)6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)7、Session 会话劫持(Session Hijacking…...

uniapp 将标题背景更换背景图片 完美解决(附加源码+实现效果图)

问题描述 今天拿到小程序的设计效果图后&#xff0c;标题部分背景需要加背景图片&#xff0c;以往我做的都是标题背景更换颜色等&#xff0c;加背景图片还是第一次遇到&#xff0c;大家可以先看下我的效果图是否与你遇到的问题一致&#xff01; 首页标题的背景是个背景图片。 …...

必备工具:Postman Newman 详解

目录 Postman Newman 是什么&#xff1f; Postman Newman 的作用 如何使用 Postman Newman&#xff1f; 第一步&#xff1a;安装 Node.js 第二步&#xff1a;全局安装 Newman 第三步&#xff1a;导出集合或环境变量为 JSON 格式 第四步&#xff1a;使用 Newman 运行测试…...

OpenCV基本操作——算数操作

目录 图像的加法图像的混合 图像的加法 两个图像应该具有相同的大小和类型&#xff0c;或者第二个图像可以是标量值 注意&#xff1a;OpenCV加法和Numpy加法之间存在差异。OpenCV的加法是饱和操作&#xff0c;而Numpy添加的是模运算 import numpy as np import cv2 as cv imp…...

css实现文字首行缩进的效果

<div class"content"><p>站在徐汇滨江西岸智塔45楼&#xff0c;波光粼粼的黄浦江一览无余。近处&#xff0c;是由龙华机场储油罐改造而来的油罐艺术中心和阿里巴巴上海总部办公处。远处&#xff0c;历史悠久的龙华塔挺拔秀丽&#xff0c;总投资逾600亿元…...

Eclipse-配置彩色输出打印

文章目录 前言配置下载查看是否安装 前言 这是一篇古老的文章&#xff0c;那个时候还在用Eclipse &#xff0c;现在已经换 IDEA 了… 这是一篇 2018 年的文章&#xff0c;我只是将文章从个人比较挪到了CSDN 中 配置 配置完然后下载下面插件即可生成彩色代码。 下载 ANSI …...

easyx图形库基础:1.基本概念的介绍+图形的绘制。

基本概念的介绍图形的绘制 一.基本概念的介绍。1.为什么要使用easyx图形库2.安装easyx图形库。3.语法相关 二.图形绘制1.窗体创建和坐标的概念。1.基本窗体的创建。2.坐标概念3.改变逻辑坐标。 2.设置图形颜色1.设置描边颜色和描边样式。2.设置图形填充颜色和填充样式3.绘制图形…...

混音教学第五课|从零认识 RVC:软件启动全流程真机实操(GTX1050Ti 专属)

作者&#xff1a;龙沅可 各位音乐编程圈的兄弟&#xff0c;我是深耕实战 3 年的地下程序员胡桃。前面我们走完了人声分离、软件模型全套准备、Anaconda 环境兜底、VOCALOID&RVC 选择杂谈、官方作品技术复盘 个人修复版全流程&#xff0c;本期终于回归主线实操&#xff0c;…...

机器学习助力无序蛋白建模

Garegin Papoian 对一类难以捉摸的蛋白质的建模探索 借助某机构研究奖的支持&#xff0c;Papoian 团队正在破解固有无序蛋白的动力学奥秘。 分子如何聚集并开始表现得像一个生命系统&#xff1f;这是驱动 Garegin Papoian 研究的问题。在马里兰大学&#xff0c;他担任 Monroe…...

Intel RealSense深度模组选型与集成实战指南:从视野范围到硬件安装

1. 深度模组选型&#xff1a;关键参数解析与应用匹配 第一次接触Intel RealSense深度模组时&#xff0c;我被型号后缀的数字搞晕了——D415、D435i、D455这些看起来差不多的型号&#xff0c;实际性能差异可能直接影响你的项目成败。以机器人避障场景为例&#xff0c;D435i在0.…...

深度技术解析:douyin-downloader架构设计与高性能实现

深度技术解析&#xff1a;douyin-downloader架构设计与高性能实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…...

Minitab局部宏进阶教程:打造动态统计计算工具(含ODBC连接技巧)

Minitab局部宏进阶教程&#xff1a;打造动态统计计算工具&#xff08;含ODBC连接技巧&#xff09; 在数据分析领域&#xff0c;Minitab作为一款专业的统计软件&#xff0c;其宏功能常常被低估。许多用户仅停留在基础操作层面&#xff0c;却不知局部宏能实现怎样的自动化魔法。本…...

告别追番焦虑:Mikan Project 一站式动漫管理解决方案

告别追番焦虑&#xff1a;Mikan Project 一站式动漫管理解决方案 【免费下载链接】mikan_flutter 蜜柑计划&#xff08; https://mikanani.me &#xff09;&#xff0c;&#x1f6a7; 持续开发中... 项目地址: https://gitcode.com/gh_mirrors/mi/mikan_flutter 你是否曾…...

LlamaFirewall实战:5分钟搞定大模型安全防护(附Python代码示例)

LlamaFirewall实战&#xff1a;5分钟搞定大模型安全防护&#xff08;附Python代码示例&#xff09; 大模型技术的快速发展带来了前所未有的生产力提升&#xff0c;但同时也引入了新的安全风险。从恶意提示注入到危险代码生成&#xff0c;这些安全隐患可能对企业和开发者造成严重…...

时间序列模型选型指南:AR、MA、ARMA、ARIMA到底该用哪个?结合销售预测与服务器监控案例讲清楚

时间序列模型选型实战&#xff1a;从销售预测到服务器监控的决策逻辑 当业务团队甩来一份历史销售数据要求预测下季度业绩&#xff0c;或是运维部门急需根据服务器日志预测潜在故障时&#xff0c;许多技术决策者会陷入选择困难——AR、MA、ARMA、ARIMA这些字母组合究竟意味着什…...

从SQL到Cypher:一个后端工程师的Neo4j避坑与效率提升指南

从SQL到Cypher&#xff1a;一个后端工程师的Neo4j避坑与效率提升指南 第一次接触Neo4j时&#xff0c;我被它处理复杂关联查询的能力震撼了。记得当时需要分析一个社交网络的六度关系&#xff0c;用传统SQL写了三层嵌套JOIN还是性能堪忧&#xff0c;而切换到Cypher后&#xff0c…...

【AGI具身智能临界点报告】:全球仅12家实验室达成毫秒级触觉-视觉-力控协同,你缺哪一环?

第一章&#xff1a;AGI的物理世界交互能力 2026奇点智能技术大会(https://ml-summit.org) 通用人工智能&#xff08;AGI&#xff09;区别于当前狭义AI的核心维度之一&#xff0c;在于其具备持续、鲁棒、具身化的物理世界交互能力——这不仅要求感知与决策闭环&#xff0c;更需…...