中国信通院发布《中国现状调查报告(2021年)》
发表时间:2023-08-31 21:01:05
文章来源:炫佑科技
浏览次数:160
菏泽炫佑科技
中国信通院发布《中国现状调查报告(2021年)》
2021年中国互联网大会在北京召开,中国信息通信研究院依托云计算开源产业联盟、大数据研究院发布《中国现状调查报告(2021)》。
调查结果显示,敏捷已成为软件开发的主流研发模式,超过一半的企业已经学习或实践了Scrum或; 85.16%的企业选择了持续集成。
想一想,你的公司已经有持续集成流程了吗? 你参与测试了吗? 公司内部进行的自动化测试是否融入到持续集成流程中?
事实上,自动化测试的*佳实践是在项目构建和部署完成后,使用自动化测试作为*终的验证手段,以保证版本的质量。
所以,不要再把自动化测试视为闭门造车,让我们看看如何将自动化测试融入到持续集成流程中。
1. 广泛的自动化测试执行
当你**次学习自动化测试时,代码是这样的吗?
那么当真正在公司开发并完成多个用例的编写时,就需要编写相应数量的类来完成整个流程的测试。 脑子开始肿了吗?
WebDriver driver=new ChromeDriver();
//访问被测网页
driver.get("https://www.baidu.com");
//与get等效
driver.navigate().to("https://music.163.com");
//返回上个页面
driver.navigate().back();
//*大化浏览器窗口
driver.manage().window().maximize();
//1、输入框输入roy
WebElement searchInput = driver.findElement(By.cssSelector("#kw"));
searchInput.sendKeys("roy");
//2、提交搜索
driver.findElement(By.cssSelector("#su")).click();
Thread.sleep(1000);
//3、清理搜索框,重新输入特斯汀进行搜索
//注意由于页面已经刷新了,这是两个不同的搜索框元素
WebElement newSinput = driver.findElement(By.cssSelector("#kw"));
newSinput.clear();
newSinput.sendKeys("特斯汀");
//如果输入框是在form表单中,可以用submit方法完成提交。
newSinput.submit();
Thread.sleep(1000);
//3、断言验证
//1、用title断言
System.out.println(driver.getTitle());
if("特斯汀_百度搜索".equals(driver.getTitle())){
System.out.println("测试标题断言成功");
}
//2、获取页面html文档判断是否包含特斯汀。
String pageSource = driver.getPageSource();
// System.out.println("页面源码是"+pageSource);
if(pageSource.contains("特斯汀")){
System.out.println("断言页面文档成功");
}
//3、获取页面上特定元素的文本或者属性进行断言
WebElement firstRes = driver.findElement(By.xpath("//div[@id='content_left']/div[1]/h3/a"));
System.out.println("文本内容是"+firstRes.getText());
System.out.println("href链接是"+firstRes.getAttribute("href"));
//等待3秒
Thread.sleep(3000);
//关闭浏览器并且杀死chromedriver进程。
driver.quit();
完成这样实现的自动化测试脚本后,运行自动化测试又成了一个大问题。 我们需要一一执行这些自动化测试代码吗? 这不是说如果要运行自动化就得一一运行吗? 是不是意味着很快就会变成手动执行?
为了解决这个问题,首先要从两个角度完成自动化测试的优化和演进:
1.用例编写和维护,简化自动化测试用例的编写过程,使编写自动化测试的门槛更低、更容易理解。
2、用例执行调度,整合自动化测试多个用例的执行,让自动化测试的执行更加优雅、便捷。
2. 自动化测试的演变
上面我们提到了解决自动化测试的维护和运维问题的两个痛点。 让我们看看如何解决它们。
2.1. 关键词驱动的介绍
为了解决用例编写过于复杂的问题,我们可以从关键字驱动的概念入手自动化软件开发,封装常见的自动化测试操作,形成关键字,在编写新用例和维护用例时复用关键字进行调用。 因此,自动化测试脚本可以优化为以下形式:
WebKeyWord web=new WebKeyWord();
web.openBrowser("chrome");
web.setWindowSize();
web.visitWeb("http://www.baidu.com");
web.halt("2");
web.inputByCss("#kw","特斯汀");
web.clickByCss("#su");
//用显式等待,来完成等待标题变成Testing
web.explicitlyWait("特斯汀_百度搜索");
web.assertELeText("//div[@id='content_left']/div[1]/h3/a","特斯汀_百度搜索");
web.halt("2.5");
web.closeBrowser();
显然,原来冗长的代码被简化为关键字方法调用后,测试数据和测试动作被组织和分离,可读性和可维护性大大提高。
但并不是所有的同事都会写代码,而且这种方式管理测试所需的操作数据也不是很通用。 有没有办法进一步降低自动化测试用例的编辑门槛? 并使用例再次更具可读性? 同时,第二个痛点是如何调度多个用例的执行?
2.2. 数据驱动简介
针对以上问题,我们考虑进一步优化,引入数据驱动的设计理念,并使用*常用的用例编辑模式——excel来记录编写好的自动化测试用例。
引入数据驱动的核心就是将代码操作和业务流程数据完全分离。 下面是一个使用数据驱动概念通过excel管理测试用例的例子。 可以直接在excel中依次添加多个测试用例,也可以使用多个sheet页进行交互管理。
当然,用excel写好用例后,必须通过代码来调用,用例才能被执行。 因此,在操作过程中,需要完成excel读写的实现,将excel中填写的用例步骤流程转换为自动化测试脚本执行:
//调用Excel读写操作类,完成用例文件的读取和结果文件的生成与结果写入。
ExcelReader reader = new ExcelReader("Cases\\WebCases.xlsx");
ExcelWriter writer = new ExcelWriter("Cases\\WebCases.xlsx", "Cases\\Result\\result-webCases" + AutoTools.dateTimeStr("MM-dd-HH:mm"));
WebKeyWord web = new WebKeyWord();
//遍历sheet页
for (int i = 0; i < reader.getTotalSheetNo(); i++) {
reader.useSheetByIndex(i);
writer.useSheetByIndex(i);
System.out.println(reader.getSheetName(i));
for (int rowNO = 0; rowNO < reader.getRowNo(); rowNO++) {
List rowContent = reader.readLine(rowNO);
System.out.format("当前执行到第%s行,当前行的内容是%s \r\n", rowNO, rowContent);
//执行关键字:
boolean result = false;
switch (rowContent.get(3)) {
case "openBrowser":
result = web.openBrowser(rowContent.get(4));
break;
case "visitWeb":
result = web.visitWeb(rowContent.get(4));
break;
case "input":
result = web.input(rowContent.get(4), rowContent.get(5));
break;
case "click":
result = web.click(rowContent.get(4));
break;
case "switchIframeByXpath":
result = web.switchIframeByXpath(rowContent.get(4));
break;
case "saveUniqueParam":
result = web.saveDateTimeParam(rowContent.get(4), rowContent.get(5), rowContent.get(6));
break;
case "selectByText":
result = web.selectWithText(rowContent.get(4), rowContent.get(5));
break;
case "closeBrowser":
result = web.closeBrowser();
break;
case "halt":
result = web.halt(rowContent.get(4));
break;
}
if (rowContent.get(0).trim().equals("") && rowContent.get(1).trim().equals("")) {
if (result) {
writer.writeCell(rowNO, 10, "测试成功");
} else {
writer.writeFailCell(rowNO, 10, "测试失败");
}
}
}
}
writer.save();
reader.close();
通过数据驱动的优化,前面提到的两个痛点都得到了解决。 用例用excel编写,更加方便易懂,而批量用例用excel编写后可以直接在数据驱动框架中运行。 调用以完成批处理运行。
至此,我们就完成了自动化测试的优化。 接下来,是时候看看如何将自动化测试引入到持续集成过程中了。
3、持续集成完成自动化测试
持续集成(CI/CD)的含义其实就是在开发过程中,团队开发成员不断地将自己的工作整合成一个完整的流程。 通常每个成员每天至少集成一次,并且每次集成都通过自动化构建(包括编译、发布、自动化测试)来验证,以便尽早发现集成错误。 持续集成的主要流程如下:
因此,自动化测试作为*后一道关卡中国信通院发布《中国现状调查报告(2021年)》,验证每个持续集成过程生成的项目是否符合质量标准,尽早发现项目中的问题。
因此,持续集成过程首先要经过源码构建和项目部署两个过程,然后完成自动化测试。
目前市场占有率*高的持续集成系统就是持续集成系统,那么接下来要做的就是在其上构建完整的持续集成流程。
该流程包括四个核心部分:
源码拉取
在构建任务中配置被测项目的源码仓库地址并完成代码拉取
编译和构建
在构建任务中添加项目对应的构建方法,如使用maven命令构建:
环境部署
通过SSH连接CI使用的测试环境,调用部署脚本完成项目的部署操作
自动化测试
将自动化测试脚本打包为可执行jar,通过命令完成调用执行,或者结合其他测试框架执行。
这样就完成了研发系统的构建过程。 *后,将预定的构建设置添加到构建触发器中,完整的持续集成过程就完成了。
*后,如果您对软件测试感兴趣,欢迎您在百度搜索“软件测试腾讯课堂”或者关注公众号“软件测试”,里面涵盖了许多精彩的免费视频或实用知识。