前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【小工具】批量造PDF文件demo

【小工具】批量造PDF文件demo

作者头像
用户9913368
发布2022-07-26 08:23:10
4850
发布2022-07-26 08:23:10
举报
文章被收录于专栏:嘎嘎软件测试

我每天在思考如何提升测试效率,也许想法还不大成熟,但我也每天慢慢在成长,希望我的一点小分享能够给同在测试路上的小伙伴一点帮助~

一、产品需求

之前测试一个需求,需求内容是根据数据库里订单号和身份证号码关联到sftp的PDF文件,PDF是以订单和身份证命名的,并且在页面做展示。

根据产品需求提炼出来的测试需求:我需要准备订单数据以及跟订单数据相关联的PDF文件,并且需要做压测,验证PDF是否正确关联到对应的订单上面,接下来看我如何准备造好这些测试文件吧。

二、测试需求拆解

1、造订单数据:通过JMeter调接口,将数据推送到数据库

2、根据数据库里面订单号和身份证号生成PDF

3、将生成的PDF文件放到sftp里面

三、具体实现

1、第一步需要写一个生成PDF的方法,因为我需要验证关联是否正确,所以我将PDF的路径、项目编号和PDF文件名称(订单号和身份证)写入PDF文件。

代码语言:javascript
复制
//创建一个最基本的pdf
public static void fillTemplate(String outpath, String projectno, String name) throws IOException, DocumentException {

    String filePath = outpath + name + ".pdf";

    BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
    Font fontChinese = new Font(bfChinese, 18, Font.NORMAL);

    try {
        //1 创建Document
        Document document = new Document();
        //2 获取PdfWriter
        PdfWriter.getInstance(document, new FileOutputStream(filePath));
        //3 打开
        document.open();
        //4 添加内容
        document.add(new Paragraph("文件路径:" + outpath,fontChinese));
        document.add(new Paragraph("项目编号:" + projectno,fontChinese));
        document.add(new Paragraph("文件名称:" + name,fontChinese));
        //5 关闭
        document.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2、第二步是连接数据库。

代码语言:javascript
复制
//连接数据库
public static Connection getConnection() {

    String Driver = "com.mysql.jdbc.Driver";
    String URL = "jdbc:mysql://172.16.xx.xx/demo?useSSL=false";
    String Name = "demo";
    String PassWrod = "demo";
    Connection connection;

    try {
        //获取驱动
        Class.forName(Driver);
        return connection = DriverManager.getConnection(URL, Name, PassWrod);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

3、第三步是将数据库的值捞出来,生成PDF,由于有一层目录是根据订单创建时间生成的,所以需要需要先捞出订单的创建时间,并生成对应的目录,然后根据捞出来的值生成PDF。

代码语言:javascript
复制
//获取数据库的值生成PDF
    public static void DataWriteToPDF(String outPath, String projectNo){

        Connection conn = WriteToPDF.getConnection();

        try {

            Statement stmt = conn.createStatement();
//            String sql = "select * from t_order_info where project_no = ? limit 100";
            String sql = "select * from t_order_info where project_no = ?";

            PreparedStatement prepStmt = conn.prepareStatement(sql);
            prepStmt.setString(1, projectNo);
            ResultSet rs = prepStmt.executeQuery();

            while (rs.next()) {
                WriteToPDF wp = new WriteToPDF();

                if (runningOnWindows() == true){
                    String str = rs.getString(3) + "_" + rs.getString(12);
                    wp.fillTemplate(outPath,projectNo, str);
                }else{
                    String createTime = new SimpleDateFormat("yyyyMMdd").format(rs.getDate(30));
                    String newPath = null;
                    String newPath1 = null;

                    switch(projectNo){
                        case "001" :
                            String str = rs.getString(3) + "_" + rs.getString(12);
                            newPath = demo_path + createTime + "/";
                            isChartPathExist(newPath);
                            System.out.println("新文件路径:" + newPath);
                            wp.fillTemplate(newPath, projectNo, str);
                            break;
                        case "002" :
                            str = rs.getString(3) + "_" + rs.getString(12);
                            newPath = demo_path + createTime + "/";
                            isChartPathExist(newPath);
                            System.out.println("新文件路径:" + newPath);
                            wp.fillTemplate(newPath, projectNo, str);
                            break;
                        default :
                            System.out.println("请输入正确的项目编号!");
                    }
                }
                System.out.println("订单创建时间:" + rs.getString(30) + " 项目编号:" + projectNo + " 订单号:" + rs.getString(3) + " 身份证号:" + rs.getString(12));
            }

4、调用生成PDF方法。因为我需要再本地windows调试,所以会有一个判断是windows还是Linux的逻辑。这里还需要将项目编号作为一个参数,作为后面调用jar包的时候传参。

代码语言:javascript
复制
public static void main(String[] args) throws Exception {

//  fillTemplate("demo/src/main/java/utils/files/", "projectNo", "demo");

        String outPath = "demo/src/main/java/utils/files/pls/";
        if (runningOnWindows() == true){
            String projectNo = "001";  
            DataWriteToPDF(outPath,projectNo);
        }else{
            String projectNo = System.getProperty("param");
            DataWriteToPDF(outPath,projectNo);
        }

    }

5、将代码打成通过IDEA打成jar包,并将jar包放到Linux服务器上面,通过调用jar包并传参的方式生成PDF。在这里我还踩了个小坑,由于我们环境默认用jdk1.7版本的,但是执行这个jar包必须得是jdk1.8。

代码语言:javascript
复制
/usr/java/jdk1.8.0_271/bin/java  -Dparam=aaa001 -cp /tmp/Learn-Java.jar utils.WriteToPDF;

四、总结

“超过重复次数3次的事情就要通过代码来解决”,哈哈哈,有没有很有道理。

测试造数是很考验一个测试工程师的基本功的,需要考虑各种场景,部分场景的重复性可能很高。

所以我们需要通过工具的思路,去解决这些重复性工作,提升测试效率。

以后我会经常分享一些我在测试工作中找到的一些提升效率的小工具或者思路,另外,这个小工具我已经上传到github上面了,但是因为整个项目比较简单,等到时机成熟了再分享出来吧,哈哈哈~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嘎嘎软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档