上一篇文章,我们阐述了如何使用Selenium框架,基于Java语言的开启自动化的Web测试,我们从配置开发环境入手,然后编写测试用例,,运行测试并生成测试报告,开启了我们的自动化测试之路。今天,在此基础上,我们利用TestNG配置启动的测试用例,可以优化我们的测试流程,使用参数化的方式让Selenium框架帮助我们填充页面数据,进一步构建自动化的流程,让我们马上开始吧。
开发环境
- Window 10.0.17763
- Java 8.0.191
- Chrome 73.0.3683
- IDEA 2018.3
Maven Version
Maven版本 - 图片来自简书AppBuild Version
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/>
</parent>
<groupId>me.weitao.app</groupId>
<artifactId>selenium-tour</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>selenium-tour</name>
<description>Selenium Project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>3.141.59</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.relevantcodes</groupId>
<artifactId>extentreports</artifactId>
<version>2.41.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>${basedir}/src/main/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
</project>
构建步骤
添加依赖 => 配置文件 => 编写测试类 => 验证结果
添加依赖
配置文件
我们利用TestNG的配置文件testng.xml
文件来配置运行mvn test
的启动项,下面给出配置文件的内容,仅供大家参考。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium Automation Test Suite">
<test name="Parameter Test Cases">
<parameter name="appConfig" value="name.properties"/>
<classes>
<class name="me.weitao.app.selenium.ParameterTest"/>
</classes>
</test>
</suite>
我们可以查看DTD文件来检索XML配置文件支持的标签及属性,这样我们会更加熟悉配置文件的含义,并结合具体的业务逻辑丰富TestNG的配置选项,然后我们在src/main/resources
文件夹下创建name.properties
文件并写入以下内容。
name=weitao
编写测试类
然后我们在src/test/java
下创建ParameterTest
类并读取配置文件name.properties
,将文件内容打印到控制台,当然我们也可以从指定的目录读取指定的文件并保存起来,以便执行下一个测试时能获取参数化的数据。
package me.weitao.app.selenium;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import java.util.Properties;
/**
* @author Watony Weng
*/
public class ParameterTest {
@Test
@Parameters(value = {"appConfig"})
public void fetchFile(@Optional("name.properties") String appConfig) {
System.out.println("appConfig => " + appConfig);
try {
Properties props = PropertiesLoaderUtils.loadAllProperties("name.properties");
for (Object key : props.keySet()) {
System.out.println(key + " => " + props.get(key));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
要点解析
- 单独执行
fetchFile
方法可以读取配置文件内容 - 通过
PropertiesLoaderUtils
快速加载配置文件 - 根据配置文件的
Key-Value
关系输出值
运行测试
我们在IDEA开发环境下,切换窗口到Terminal
下,执行mvn clean test
后,在Terminal
窗口输出以下结果。
参考
个人收获及总结
我梳理一下今天的知识点,从文件中读取数据并保存,通过TestNG的方式执行Test Suite
,那么接下来我们可以将参数化的方式和Selenium
结合起来,填充页面,比如发送文件到输入框,响应页面事件,只要是利用WebDriver标准操作页面的方式,我们就能发挥无限的潜能,构建更加稳定和更快的页面,随后我们会利用POM来扩展Selenium的操作,让它更加标椎化。我们的目标是利用工具提升我们的工作效率,更快更好地服务我们的业务。 希望大家保持学习的热情,构建更加快速和稳定的产品或服务。
网友评论