美文网首页
使用Java + TestNG 编写接口自动化测试时,遇到的问题

使用Java + TestNG 编写接口自动化测试时,遇到的问题

作者: 涅槃Ls | 来源:发表于2022-03-24 10:47 被阅读0次

    一个进阶的过程吧,遇到问题学会举一反三、记录、总结。防止在一个问题上反复试错。
    从功能测试 到 自动化测试 ,记录出现过的每一个问题。【ps. 框架 导师已经搭建好了】

    一、问题描述:执行DEMO用例时,报错:Timed out waiting for driver server to start.
    问题原因: 我的chrome浏览器版本(99) 和 ChromeDriver版本(98) 不一致导致的。
    解决方法:下载和chrome浏览器版本一致的driver即可,记得区分win、mac版本。https://chromedriver.chromium.org/downloads。 我的电脑是64位的,下载的win32的也能使用。
    二、问题描述:IDEA自动编译
    解决方法:勾选上即可
    三、问题描述:Run/Debug了demotest,项目构建有时会失败
    image.png
    问题原因:Run/Debug算是启动了chromedriver
    解决方法:任务管理器中删除所有启动的chromedriver进程即可。
    问题反思:为啥任务管理器中会有这么多的chromedriver,反馈给导师后,他建议把driver.quit,替换成 driver.close();
        @AfterSuite
        public void afterSuit() {
            if (driver != null) {
                driver.quit();
            }
            log.info(StringOpeUtils.genDelimiter("测试结束"));
        }
    
    四、问题描述:打不开IDEA中的终端,报错:Cannot open Local Terminal Failed to start [powershell.exe] in ***
    解决方法:将Shell路径替换成本机的shell路径,重新打开IDEA中的终端即可
    五、整理项目中P0级别测试点,记录接口地址,方法,传参,返回值等基本信息,以及具体的使用场景,以及返回值的常见断言。

    简单示例

        @TestConfig(fPath = "testdata/compare/biz/createBiz/createBizTest.json")
        @Test(description = "创建空间,传参正常的值,空间名称加当前时间戳")
        public void createBizTest() {
            JSONObject requestObj = JSONObject.parseObject(paramsModel.getRequest());
            requestObj.put("bizId",requestObj.getString("bizId") + new Date().getTime());
            requestObj.put("bizName",requestObj.getString("bizName")+ new Date().getTime());
            String res = biz.create(requestObj.toJSONString());
            paramsModel.setActualResp(res);
            AssertUtils.commonAssert();
        }
    
    六、问题描述:Assert.assertEquals作用、assertSame的作用
    七、问题描述:JSONObject.parseObject(paramsModel.getResponse()),报错com.alibaba.fastjson.jsonexception: syntax error, pos 1, line 1, column 2

    自己花蛮长时间搜索解决方法,还是无法修复,就寻求导师帮助。导师通过本地、postman的两次验证,发现是接口返回的类型从普通json格式变成了html格式了。

    解决方法:在header中增加了("Accept","application/json")。后经证实是开发修改了配置文件导致的。
    问题总结:学会使用postman工具来排查是后台接口问题,还是自动化测试脚本的问题。
    八、问题描述:IntelliJ IDEA 报错:找不到包或者找不到符号
    解决方法:删除target文件后,pom文件右键 重新构建项目即可。
    九、问题描述:clone项目到本地其他路径,打开IDEA,执行报错:java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Map sun.reflect.annotation.AnnotationInvocationHandler.memberValues accessible: module java.base does not "opens sun.reflect.annotation" to unnamed module @7a0ac6e3
    解决方法:运行/调试配置JRE换成最新的jdk
    十、路径中含有参数GET请求,如何获取参数。 直接放在路径中,放在参数urlParams
        @ApiConf(uri = "***/data_resource/{data_resource_id}?__ilike={__ilike}&biz_url={biz_url}", requestMethod = RequestMethod.GET)
        public String eventConfList(String params, String urlParams) {
            return null;
        }
    
    十一、IDEA快捷键:选中代码后,移动一行

    在主菜单上选择 代码| 向上移动(Code | Move Line Up)或代码| 向下移动(Code | Move Line Down)。按Shift+Alt+Up 或Shift+Alt+Down。

    十二、将json字符串中的对象list转换成 对象model
            JSONArray reqObj = JSONObject.parseObject(paramsModel.getRequest()).getJSONArray("event_list");
            List<EventModel> eventModels = JSONArray.parseArray(JSONObject.toJSONString(reqObj), EventModel.class);
    
    十三、Java中判断list为空(CollectionUtils.isEmpty)
    十四、包含不区分大小写:org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,CharSequence searchStr);

    十五、记得之前参考导师代码时,发现他类里面的方法命名有时候就是Test01、Test0102、***Test0103,我当时还不以为然,这样命名太随意了吧。指导我写了三周代码,我发现了他的明智。 否则真的太冗余。 我屁颠屁颠的改了一版,去除冗余,一目了然,不向我之前看起来命名太长,累。
    十六、问题描述:【第二次遇到这个问题了】执行报错java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Map
    参考原因:
    解决方法: image.png
    十七、新增加了功能,运行时报错:
        org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.beacon.apitest.BeaconApiTestApplication]; nested exception is org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'dataResource' for bean class [com.beacon.apitest.api.plugin.DataResource] conflicts with existing, non-compatible bean definition of same name and class [com.beacon.apitest.api.dataResorce.DataResource]
        at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:189) ~[spring-context-5.3.3.jar:5.3.3]
        at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:336) ~[spring-context-5.3.3.jar:5.3.3]
        at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:252) ~[spring-context-5.3.3.jar:5.3.3]
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanDefinitionRegistryPostProcessors(PostProcessorRegistrationDelegate.java:285) ~[spring-context-5.3.3.jar:5.3.3]
        at org.springframework.context.support.PostProcessorRegistrationDelegate.invokeBeanFactoryPostProcessors(PostProcessorRegistrationDelegate.java:99) ~[spring-context-5.3.3.jar:5.3.3]
        at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:751) ~[spring-context-5.3.3.jar:5.3.3]
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:569) ~[spring-context-5.3.3.jar:5.3.3]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:767) ~[spring-boot-2.4.2.jar:2.4.2]
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) ~[spring-boot-2.4.2.jar:2.4.2]
        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:426) ~[spring-boot-2.4.2.jar:2.4.2]
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:326) ~[spring-boot-2.4.2.jar:2.4.2]
    
    问题原因:在报错中的前几行就能看到 Annotation-specified bean name 'dataResource' for bean class [com.beacon.apitest.api.plugin.DataResource] conflicts with existing。 出现类名冲突了。
    解决方法:把重名的类换个名字即可。
    十八、运行报错: image.png
    image.png
    十九、testNG,@ApiConfig中如何给参数赋值
    @ApiConf(uri = "/webserver/data_resource/{resourceId}?ba_key={ba_key}&biz_url={biz_url}&log_trace_id={log_trace_id}", requestMethod = RequestMethod.DELETE)
        public String dataResourceDelete(String urlParams) {
            return null;
        }
    
    二十、写代码有2个月了吧, 总想着一次就写的很好很好,最简方法、最优方案。 其实不是的。最起码要先实现,然后再优化。

    相关文章

      网友评论

          本文标题:使用Java + TestNG 编写接口自动化测试时,遇到的问题

          本文链接:https://www.haomeiwen.com/subject/ovxhjrtx.html