Java接口自动化测试框架系列(五)测试框架整体执行流程
通过前四步的框架完善,此时已经可以开始写TestCase。
但是想框架整体运行流畅还需要对maven与testng的配置文件进行编写。
一、Maven配置文件
在pom.xml文件种配置框架所需要的jar包坐标,并通过build配置编码、版本、执行的文件地址、存在case失败时的处理方式等信息
<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> <groupId>com.ShangHai_Auto_Test</groupId> <artifactId>ShangHai_Auto_Test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>ShangHai_Auto_Test</name> <url>http://maven.apache.org</url> <properties> <!-- 文件拷贝时的编码 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 编译时的编码 --> <maven.compiler.encoding>UTF-8</maven.compiler.encoding> </properties> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.5</version> <configuration> <!-- 解决maven执行test时,输出testnglog出现的中文乱码 --> <forkMode>once</forkMode> <argLine>-Dfile.encoding=UTF-8</argLine> <!-- 跳过失败用例 --> <testFailureIgnore>true</testFailureIgnore> <!-- 配置XML需要执行的文件 --> <suiteXmlFiles><file>TestNG.xml</file></suiteXmlFiles> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>cn.tass</groupId> <artifactId>hsmGeneralFinance</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/hsmGeneralFinance-2.0.9.jar</systemPath> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.9</version> </dependency> <dependency> <groupId>org.dom4j</groupId> <artifactId>dom4j</artifactId> <version>2.1.0</version> </dependency> <dependency> <groupId>org.spiredoc</groupId> <artifactId>spiredoc</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.0</version> </dependency> <!--excel解析--> <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.12</version> </dependency> <!--Spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <!-- 内嵌tomcat --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>9.0.52</version> <scope>compile</scope> <exclusions> <exclusion> <artifactId>tomcat-annotations-api</artifactId> <groupId>org.apache.tomcat</groupId> </exclusion> </exclusions> </dependency> <!-- 阿里json处理类 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.14</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>alibaba-dingtalk-service-sdk</artifactId> <version>1.0.1</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.4</version> </dependency> <!--testng依赖 --> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8</version> </dependency> <dependency> <groupId>com.relevantcodes</groupId> <artifactId>extentreports</artifactId> <version>2.41.1</version> </dependency> <dependency> <groupId>com.vimalselvam</groupId> <artifactId>testng-extentsreport</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>com.aventstack</groupId> <artifactId>extentreports</artifactId> <version>3.0.6</version> </dependency> <!-- HTTP client依赖 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency> <dependency> <groupId>commons-httpclient</groupId> <artifactId>commons-httpclient</artifactId> <version>3.1</version> </dependency> <!-- log4j依赖 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> <!-- mybatis依赖 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.0</version> </dependency> <!-- MySQL数据库依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.11</version> </dependency> <!-- json依赖 --> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>4.5.10</version> </dependency> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.3.2</version> </dependency> <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.64</version> </dependency> </dependencies> </project>
二、TestNG.xml配置文件
第一步时pom指定的testng.xml运行文件,通过suite-test来指定运行的case的地址,并且进行监听的注册。
<?xml version="1.0" encoding="UTF-8"?> <suite name="自动化测试" parallel="classes"> <test name="落单"> <classes> <class name="com.Auto_Test.Case.Add_Orders" /> </classes> </test> <test name="投保"> <classes> <class name="com.Auto_Test.Case.Insures" /> </classes> </test> <!-- 注册监听 --> <listeners>
<listener class-name="com.Auto_Test.listeners.ExtentTestNGIReporterListener"/> <listener class-name="com.Auto_Test.listeners.DingTalkListener"/> </listeners> </suite>
三、TestCase详解
第一步与第二步完成后,就可以开始编写case了,首先定义所需要的变量、调用解析excel的公共方法
//定义一个list对象,获取CSV文件中的数据 List<String[]> csvlist = null; //传参list public ArrayList<NameValuePair> list; //log方法 Logs log = new Logs(getClass()); Map<String, String> map = null; //配置文件取值 @DataProvider(name = "host") public Object[][] parameter() throws IOException, BiffException { log.info("读取地址"); ReadCSV e=new ReadCSV("citydata", "city"); return e.getExcelData(); }
此时可以开始编写case,通过获取excel的加密方式,来进行不同的处理与请求。
通过返回的字段进行断言比对,运行成功后失败都会把结果记录到测试报告中。
//落单 @Test(dataProvider = "host") public void Add_Order(HashMap<String, String> citydata) { //定义落单的url String add_order_url = citydata.get("city_url")+"***"; if (citydata.get("encryption_type").equals("***")) { try { map = GUOTAI_GUANGXI.encryptions(add_order_url,citydata.get("appKey")); //进行断言对比 assertEquals("1", map.get("ResultCode")); Reporter.log("OrderNo:"+map.get("OrderNo")); } catch (Exception e) { // TODO: handle exception Reporter.log(e.toString()); assertTrue(false); } } else if (citydata.get("encryption_type").equals("***")) { try { map = GUOTAI_JSON.encryptions(add_order_url,citydata.get("appKey"),citydata.get("appSecret"),citydata.get("city_name")); //进行断言对比 if (map.get("ResultCode").equalsIgnoreCase("1")) { Reporter.log("OrderNo:"+map.get("OrderNo")); assertTrue(true); } else { assertTrue(false); } } catch (Exception e) { // TODO: handle exception Reporter.log(e.toString()); assertTrue(false); } } else if (citydata.get("encryption_type").equals("***")) { try { map = GUANGLIANDA_XIAN.encryptions(add_order_url); assertEquals("SUCCESS", map.get("status")); Reporter.log("OrderNo:"+map.get("orderNo")); } catch (Exception e) { // TODO: handle exception Reporter.log(e.toString()); assertTrue(false); } } }
需要此项目的可以加我微信15224918643获取,也可以一起交流技术。
欢迎打扰