您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

自动化测试之读取配置文件

时间:2020-09-14 12:57:15  来源:  作者:

本文为霍格沃兹测试学院优秀学员学习笔记,进阶学习文末加群。

 

在日常自动化测试开发工作中,经常要使用配置文件,进行环境配置,或进行数据驱动等。我们常常把这些文件放置在 resources 目录下,然后通过 getResource、ClassLoader.getResource 和 getResourceAsStream() 等方法去读取。经常看到有不少同学在读取配置文件时踩坑,本人也是一路踩坑摸索过来,这里做一个简要梳理,供大家参考。

一、何为 classpath ?

读取资源文件最关键的就是找到文件的位置,归根结底就是找路径,而怎么找,在哪找就是个问题。这其中和 classpath 有很大关系,因此我们先了解下 classpath 的概念,帮助理清思路。

  • 我们用 JAVA 编写的文件都是 .java 文件,而想要运行,还需将其编译成 .class 字节码文件才可被 JVM 运行;这就需要 JVM 先找到对应的 .class 才行,这也就是要找到对应的classpath。
  • JVM 会在编译项目时,会主动将 .java 文件编译成 .class 文件 并和 resources目录下的静态文件一起放在 target/classes (如果是 test 下的类,便会放于 /target/test-classes 下)目录下;

现有工程目录如下:

自动化测试之读取配置文件 | 踩坑指南

 

编译后进入 target 目录下查看如下:

自动化测试之读取配置文件 | 踩坑指南

 

二、class.getResource()

先来看 getResource 的用法

先分别执行如下测试代码,打印带有"/"和不带"/"的path

    import org.junit.jupiter.api.Test;
    public class ResourceTestDemo {
        @Test
        void getResourceTest(){            System.out.println(ResourceTestDemo.class.getResource(""));
            System.out.println(ResourceTestDemo.class.getResource("/"));
           }

打印结果:

    file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/test-classes/resourcetest/
    file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/test-classes/

结果分析:

1、getResource("")不带"/“时候是从当前类所在包路径去获取资源;

2、getResource("/")带”/"时候是从classpath的根路径获取;

现在来尝试获取resources下的文件2.txt和3.txt:

自动化测试之读取配置文件 | 踩坑指南

 

测试代码:

    @Test
     void getResourceFileTest(){         System.out.println(ResourceTestDemo.class.getResource("/3.txt"));
         System.out.println(ResourceTestDemo.class.getResource("/test/2.txt"));
     }

打印结果:

    file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/3.txt
    file:/Users/username/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/test/2.txt

三、getClassLoader().getResource()

和上述一样,先分别执行测试代码,打印带有"/"和不带"/"的path:

     @Test
     void getClassLoaderResourceTest(){         System.out.println(ResourceTestDemo.class.getClassLoader().getResource(""));
         System.out.println(ResourceTestDemo.class.getClassLoader().getResource("/"));
     }

打印结果:

    file:/Users/qinzhen/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/test-classes/
    null

结果分析:

1、 getClassLoader().getResource("")不带"/“时候是从classpath的根路径获取;

2、 getClassLoader().getResource("/")带有”/"打印为null,路径中无法带有"/"

  • 现在继续尝试获取resources下的文件2.txt和3.txt:@Test
    void getClassLoaderResourceFileTest(){ System.out.println(ResourceTestDemo.class.getClassLoader().getResource("3.txt")); System.out.println(ResourceTestDemo.class.getClassLoader().getResource("test/2.txt"));}

打印结果:

    file:/Users/qinzhen/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/3.txt
    file:/Users/qinzhen/Documents/TestDev/MyTraining/XUnit/ResourceTest/target/classes/test/2.txt

四、getResourceAsStream()

getResourceAsStream() 方法仅仅是获取对应路径文件的输入流,在路径的用法上与getResource()一致。

补充

其实当我们查看 class.getResource 的源码时发现如下:

public java.net.URL getResource(String name) {
    name = resolveName(name);    ClassLoader cl = getClassLoader0();    if (cl==null) {
        // A system class.
        return ClassLoader.getSystemResource(name);
    }
    return cl.getResource(name);
}  

其实这里也是调用了getClassLoader,只是方便了我们使用而已。

总结

  • class.getResource()不带"/"时候是从当前类所在包路径去获取资源;
  • class.getResource()带"/"时候是从classpath的根路径获取;
  • class.getResource()本质上也是调用了getClassLoader,只是封装了一层方便了我们使用而已;
  • getClassLoader().getResource("")不带"/"时候是从classpath的根路径获取;
  • getClassLoader().getResource("/")路径中无法带有"/";
  • getResourceAsStream() 方法仅仅是获取对应路径文件的输入流,在路径的用法上与getResource()一致;

以上,供大家探讨。



Tags:自动化测试   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  Tags: 自动化测试  点击:(42)  评论:(0)  加入收藏
前言之前我们玩过一些手机自动化软件,比如Airtest,ADB,通过这些软件我们可以和自己的手机进行关联,并且使用程序来代替我们本人来操作手机,今天我们要说的是另一款给力的自动化AP...【详细内容】
2021-10-26  Tags: 自动化测试  点击:(35)  评论:(0)  加入收藏
近期准备优先做接口测试的覆盖,为此需要开发一个测试框架,经过思考,这次依然想做点儿不一样的东西。 接口测试是比较讲究效率的,测试人员会希望很快能得到结果反馈,然而接口的数...【详细内容】
2021-04-01  Tags: 自动化测试  点击:(209)  评论:(0)  加入收藏
我们都希望为 Web 应用程序构建易维护的测试。作为这个目标的一部分,我们都希望能集中精力在测试本身,而尽量避免困在实施的具体细节中。从长远来看,测试应该是可维护的,对软件...【详细内容】
2020-11-09  Tags: 自动化测试  点击:(954)  评论:(0)  加入收藏
什么是App自动化?为什么要做App自动化?App自动化是指给 Android或iOS上的软件应用程序做的自动化测试。 手工测试和自动化测试的对比如下:手工测试优势:不可替代、发现更多bug、...【详细内容】
2020-10-29  Tags: 自动化测试  点击:(107)  评论:(0)  加入收藏
1)环境准备:  接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后...【详细内容】
2020-09-17  Tags: 自动化测试  点击:(37)  评论:(0)  加入收藏
作者:星安果来源:AirPython 1. 前言原始测试金子塔包含 3 层,分别是:UI 自动化测试、接口服务测试、单元测试 其中,单元测试是对软件的最小可测试单元进行检查和验证,也是产生效...【详细内容】
2020-09-17  Tags: 自动化测试  点击:(475)  评论:(0)  加入收藏
在日常自动化测试开发工作中,经常要使用配置文件,进行环境配置,或进行数据驱动等。我们常常把这些文件放置在 resources 目录下,然后通过 getResource、ClassLoader.getResource 和 getResourceAsStream() 等方法去读取。...【详细内容】
2020-09-14  Tags: 自动化测试  点击:(60)  评论:(0)  加入收藏
提到敏捷交付,我们总会说到持续集成,持续交付,持续发布,即频繁地交付产品特性。而我们都知道要实现真正的持续交付,必然少不了两个关键要素: 持续集成工具 自动化测试 , 自动化的产...【详细内容】
2020-08-07  Tags: 自动化测试  点击:(50)  评论:(0)  加入收藏
我们在测试时,可能会遇到以下几种测试分组的场景: 一个测试类当中有多个测试方法,只想执行其中的几个相关的测试方法。 当几个相关的方法依赖相同的 setUp、tearDown操作。 ...【详细内容】
2020-07-26  Tags: 自动化测试  点击:(36)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条