java自动化将用例和截图一起执行测试放入world中直接生成测试报告【搬代码】

news2024/11/13 9:26:28

1.首先我们得用例写好之后放入文档中,把不用的案例类型、前置条件去掉之后,如图:
1
放到桌面后,先看执行结果:
在这里插入图片描述

直接上代码

package com.znzdh.qitagongju;

import jxl.Sheet;
import jxl.Workbook;
import org.apache.commons.io.FileUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.testng.annotations.Test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.logging.Logger;

public class Eworld3 {

    public static Logger log= Logger.getAnonymousLogger();
    // 创建新的Word文档对象
    public static final XWPFDocument document = new XWPFDocument();
    public static void main(String[] args) {
        try{

            // 添加段落内容,也就是标题
            XWPFParagraph p = document.createParagraph();
            p.setStyle("标题4");//设置标题2
            p.setFontAlignment(2);//字体对齐方式:1左对齐 2居中3右对齐
            XWPFRun run = p.createRun();
            run.setText("xxx测试报告");//添加标题



            //urlexcel,这个地址是你用例的地址
            String path="D:\\桌面\\Eworld1.xls";
            //解析路径
           Workbook workbook=Workbook.getWorkbook(new File(path));
            //获取第一张表
            Sheet sheet = workbook.getSheet(0);


            //循环获取第一行数据,因为默认第一行为标题行,我们可以从1开始循环,如果需要读取标题行,从0开始
            for (int i = 1; i <sheet.getRows() ; i++) {
                //获取第一行的第i行信息 sheet.getcell(列,行);下标从0开始
                String name = sheet.getCell(0, i).getContents();
                System.out.println("标题::"+name);
                //获取第二行的第i行信息
                String miaoshu = sheet.getCell(1,i).getContents();
                System.out.println("描述::"+miaoshu);
                //获取第三行的第i行信息
                String buzhou = sheet.getCell(2,i).getContents();
                System.out.println("步骤:"+buzhou);
                //获取第四行的第i行信息
                String yuqi = sheet.getCell(3,i).getContents();
                System.out.println("预期结果:"+yuqi);
                System.out.println("===========================");
                //将获取到每行的内容放到数组中
                String data[]={name,miaoshu,buzhou,yuqi};


                // 添加段落内容,也就是标题
                XWPFParagraph paragraph1 = document.createParagraph();
                paragraph1.setStyle("标题4");//设置标题2
                paragraph1.setFontAlignment(1);//字体对齐方式:1左对齐 2居中3右对齐
                XWPFRun run1 = paragraph1.createRun();
                run1.addBreak();//换行
                run1.setText(data[0]);//添加第一行段落文本


                // 添加表格 1行3列
                XWPFTable table = document.createTable(1,3);
                // 设置表格的行高和列宽
                table.setWidth(9000);// 设置列宽
                table.getRow(0).getCell(0).setWidth("3000");//设置获取第一行1列设置宽度
                table.getRow(0).getCell(1).setWidth("3000");//设置获取第一行2列设置宽度
                table.getRow(0).getCell(2).setWidth("3000");//设置获取第一行3列设置宽度
                int rowCount = 1;
                int colCount = 3;

                    for (int a = 0; a < rowCount; a++) {
                        XWPFTableRow row = table.getRow(a);

                        if (row == null) {
                            row = table.createRow();
                        }

                        for (int j = 0; j < colCount; j++) {

                            XWPFTableCell cell = row.getCell(j);

                            
                            if (cell == null) {
                                cell = row.addNewTableCell();
                            }
                            if (j==0){
                                XWPFParagraph cellPara = cell.getParagraphArray(0);
                                XWPFRun cellRun = cellPara.createRun();
                                cellRun.setText(data[1]);
                            }else if (j==1){
                                XWPFParagraph cellPara = cell.getParagraphArray(0);
                                XWPFRun cellRun = cellPara.createRun();
                                cellRun.setText(data[2]);
                            }else if (j==2){
                                XWPFParagraph cellPara = cell.getParagraphArray(0);
                                XWPFRun cellRun = cellPara.createRun();
                                cellRun.setText(data[3]);

                            }

                        }
                        }
//放测试截图
                //放测试用例代码,一张完美的自动化测试报告就产生了
                if (data[0].equals("修改商户费率-001")){
                    //TimesUntil.Screen();
                    test002();


                }else if (data[0].equals("修改商户费率-002")){
                    test002();

                }
                    }

        // 保存为Word文件
            FileOutputStream outStream = new FileOutputStream("output.docx");
            document.write(outStream);
            outStream.close();

            System.out.println("成功生成Word文件!");
        }catch (Exception e){
            e.printStackTrace();
        }
    }



  //这里是编写测试用例执行代码地方
    public static void test002() throws IOException, InvalidFormatException, InterruptedException {
        ChromeDriver driver = new ChromeDriver();
        System.setProperty("webdriver.chrome.bin","C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\Application\\chrome.exe");
        System.setProperty("webdriver.chrome.driver","C:\\Users\\Administrator\\AppData\\Local\\Google\\Chrome\\Application\\chromedriver.exe");

        driver.get("http://www.baidu.com");
        Thread.sleep(5000);
        String screen = Screen(driver);//调用方法,将截图的时间获取到,放入插入图片那里

//        创建一个段落对象。
        XWPFParagraph paragraph=document.createParagraph();
//        创建一个run。run具体是什么,我也不知道。但是run是这里面的最小单元了。
        XWPFRun run=paragraph.createRun();
//        插入图片,将screen时间截图的时间获取到,放入插入图片这里
        run.addPicture(new FileInputStream("E:/idear/idearxm/jiekou/test-output/images/"+screen+".png"),
                XWPFDocument.PICTURE_TYPE_PNG,
                screen+".png",
                Units.toEMU(400),
                Units.toEMU(200));
        }

        //截图放起来,并且返回一个截图时间
    public static String  Screen(ChromeDriver driver) throws IOException {

        File file=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
        //直接添加E:/idear/idearxm/jiekou,前面没有。。
        String times = times();
        FileUtils.copyFile(file,new File("E:/idear/idearxm/jiekou/test-output/images/"+times+".png"));
        driver.quit();
        return times;//把截图时间也返回去
    }

    //创建时间
    public static String times(){
        Date date = new Date();
        String format = String.format("%tF", date);
        String hour = String.format("%tH", date);
        String mintus = String.format("%tM", date);
        String secound = String.format("%tS", date);
        String t=format+hour+mintus+secound;
        return t;
    }
}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1381968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot读取配置文件中的内容

文章目录 1. 读取配置文件application.yml中内容的方法1.1 Environment1.2 Value注解1.3 ConfigurationProperties 注解1.4 PropertySources 注解&#xff0c;获取自定义配置文件中的内容&#xff0c;yml文件需要自行实现适配器1.5 YamlPropertiesFactoryBean 加载 YAML 文件1.…

Java面试基础|数据结构 -实时更新

1.HashMap和ConcurrentHashMap介绍 核心是一个Node数组&#xff0c;数据结构与hashMap相似 使用CAS操作来实现无锁的更新&#xff0c;提高了并发性。当更新节点时&#xff0c;它会使用CAS来替换节点的值或链接&#xff0c;如果CAS失败&#xff0c;表明有其他线程也在进行修改&a…

C语言--单链表的创建及使用详解

C语言--单链表的创建及使用详解 1. 单链表定义1.1 工作原理1.2 优点 2. 单链表的创建2.1 文件创建2.2 节点创建2.3 链表显示 3. 链表操作3.1 尾插3.2 头插3.3 尾删3.4 头删3.5 指定数据寻找3.6 指定位置前插入3.7 指定位置删除 4. 单链表总内容4.1 test.c文件4.2 SList.h文件4.…

强化学习应用(一):基于Q-learning的物流配送路径规划研究(提供Python代码)

一、Q-learning算法简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是使用一个Q值函数来估计每…

ubuntu连接xshell怎么连接

在网上找了好多办法都不行 例如 太久没打开Ubuntu可能输入命令查不到IP地址&#xff0c;解决办法也比较简单&#xff0c;首先第一步 确定自己能不能进入管理员root权限&#xff08;输入命令su&#xff09;&#xff0c;如果没有的话得重新配置&#xff0c;如下图 这是因为当前Ub…

DC-DC变换集成电路芯片B34063——工作电压范围宽,静态电流小

B34063为一单片DC-DC变换集成电路&#xff0c;内含温度补偿的参考电压源(1.25V)、比较器、能有效限制电流及控制工作周期的振荡器,驱动器及大电流输出开关管等&#xff0c;外配少量元件&#xff0c;就能组成升压、降压及电压反转型DC-DC变换器。 主要特点&#xff1a; ● 工作…

文本翻译GUI程序,实现简单的英汉互译

项目地址&#xff1a;mendianyu/txtTranslate: 文本翻译GUI程序&#xff0c;实现简单的英汉互译 (github.com) 文本翻译GUI程序&#xff0c;实现简单的英汉互译 项目结构 三个java文件加一个pom文件 项目运行效果 语言可选择en(英语) zh(汉语) auto(自动识别&#xff0c;仅源语…

推荐算法常见的评估指标

推荐算法评估指标比较复杂&#xff0c;可以分为离线和在线两部分。召回、粗排、精排和重排由于定位区别&#xff0c;其评估指标也会有一定区别&#xff0c;下面详细讲解。 1 召回评价体系 召回结果并不是最终推荐结果&#xff0c;其本质是为后续排序层服务的&#xff0c;故核…

【深度学习目标检测】十五、基于深度学习的口罩检测系统-含GUI和源码(python,yolov8)

YOLOv8是一种物体检测算法&#xff0c;是YOLO系列算法的最新版本。 YOLO&#xff08;You Only Look Once&#xff09;是一种实时物体检测算法&#xff0c;其优势在于快速且准确的检测结果。YOLOv8在之前的版本基础上进行了一系列改进和优化&#xff0c;提高了检测速度和准确性。…

通过IP地址识别风险用户

随着互联网的迅猛发展&#xff0c;网络安全成为企业和个人关注的焦点之一。识别和防范潜在的风险用户是维护网络安全的关键环节之一。IP数据云将探讨通过IP地址识别风险用户的方法和意义。 IP地址的基本概念&#xff1a;IP地址是互联网上设备的独特标识符&#xff0c;它分为IP…

前端工程化相关

工具方法&#xff1a; 知道软件包名&#xff0c;拿到源码或者路径的方法 在浏览器输入以下内容&#xff0c;就可以找到你想要的。。。 unpkg.com/输入包名 一、模块化 ESM特性清单&#xff1a; 自动采取严格模式&#xff0c;忽略“use strict”每个ESM模块都是单独的私有作用…

“华为杯“第四届中国研究生数学建模竞赛-D题:邮路规划与邮车调度

目录 摘 要&#xff1a; 1.问题的重述 2.模型的假设与符号说明 2.1 针对本问题&#xff0c;本文做出如下假设 2.2 符号说明 3.问题的数学模型 4.问题的求解 4.1 问题一的求解 4.1.1 最少邮车数的求法 4.1.2 邮路规划及路径选择 4.1.3 问题的求解结果 4.2 问题二的求…

FPGA之初探

FPGA的构成 基本逻辑单元CLB CLB是FPGA的基本逻辑单元&#xff0c; 一个 CLB 包括了 2 个 Slices&#xff0c;所以知道Slices的数量就可以知道FPGA的“大概”逻辑资源容量了。一个 Slice 等于 4 个6输入LUT8个触发器(flip-flop)算数运算逻辑&#xff0c;每个 Slice 的 4 个触发…

在线的货币兑换平台源码下载

在线的货币兑换平台&#xff0c;可帮助全球各地的个人和企业将货币从一种货币兑换为另一种货币。该货币兑换平台是 Codecanyon 中最先进的脚本。 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/88728084

VMware 安装及创建一个 CentOS Stream 的详细指南

文章目录 1. 简介2. 下载和安装1&#xff09;通过官网安装2&#xff09;通过电脑管家安装 3. 下载操作系统镜像包4. 创建虚拟机结语 1. 简介 在过去&#xff0c;服务器通常是运行单一操作系统和应用程序的物理设备。这就导致了硬件资源浪费和管理复杂性的增加。为了解决这些问…

【C++刷题】位运算

【C刷题】位运算 一、二进制中最右侧的11、位1的个数&#xff08;1&#xff09;题目链接&#xff08;2&#xff09;解析&#xff08;3&#xff09;代码 2、比特位计数&#xff08;1&#xff09;题目链接&#xff08;2&#xff09;解析&#xff08;3&#xff09;代码 3、汉明距离…

LTESniffer:一款功能强大的LTE上下行链路安全监控工具

关于LTESniffer LTESniffer是一款功能强大的LTE上下行链路安全监控工具&#xff0c;该工具是一款针对LTE的安全开源工具。 该工具首先可以解码物理下行控制信道&#xff08;PDCCH&#xff09;并获取所有活动用户的下行链路控制信息&#xff08;DCI&#xff09;和无线网络临时…

重温经典struts1之自定义全局异常处理类处理异常以及<exeception>标签的配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 前言 前面的文章&#xff0c;我们学习了&#xff0c;Action类中调用Service&#xff0c;通过try…catch代码块&#xff0c;catch自定义异常类&#xff0c;通过ActionMessage…

cesium粒子效果——船舰水花效果

效果&#xff1a; 实现思路&#xff08;最后有完整代码&#xff09;&#xff1a; 与上篇文章思路一样 无非就是更换了模型与粒子图片以及粒子的配置&#xff0c;上一篇文章链接&#xff1a;https://blog.csdn.net/m0_63701303/article/details/135551667?spm1001.2014.3001.5…

neo4j 图数据库 py2neo 操作 示例代码

文章目录 摘要前置NodeMatcher & RelationshipMatcher创建节点查询获取节点节点有则查询&#xff0c;无则创建创建关系查询关系关系有则查询&#xff0c;无则创建 Cypher语句创建节点 摘要 利用py2neo包&#xff0c;实现把excel表里面的数据&#xff0c;插入到neo4j 图数据…