1. maven中先引入testng的包
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
<scope>test</scope>
</dependency>
2.安装testng插件 eclipse下载插件参考http://www.mamicode.com/info-detail-2224104.html
3.右击项目或者包--testng--create testng class (安装完成就会有testng选项),选择需要的注解,设置testng xml配置文件

4.配置如下
<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite" parallel="false">
<test name="Test">
<classes>
<class name="com.javaTestest.casetest.test1"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
5.测试的链接:
http://apis.juhe.cn/simpleWeather/query?city="苏州"&key=
代码:
package com.javaTestest.casetest;
import java.util.List;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
public class test1 {
private String execlPath = "E:\tools\Python\test\update2.xlsx";
// public static void main(String[] args) {
// post();
// }
@Test(dataProvider = "getDatas")
private void testng1(Object[] datas1) {
post(datas1);
}
//数据提供者
@DataProvider
private Object[] getDatas(){
List<NameValuePair[]> nvpList = Utils.read(execlPath);
Object[] datas = nvpList.toArray();
return datas;
}
private void post(Object[] datas1) {
HttpClient httpClient = new HttpClient();
PostMethod postMethod = new PostMethod("http://apis.juhe.cn/simpleWeather/query");
// NameValuePair[] datastest = {new NameValuePair("city","苏州"),new NameValuePair("key","")};
// System.out.println(datastest);
System.out.println(datas1.toString());
NameValuePair[] datas = (NameValuePair[])datas1;
postMethod.setRequestBody(datas);
try {
httpClient.executeMethod(postMethod);
String string = new String(postMethod.getResponseBody(),"utf-8");
int statusCode = postMethod.getStatusCode();
System.out.println(statusCode);
System.out.println(string);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@BeforeTest
private void beforetestng(){
System.out.println("==========@BeforeTest===========");
}
@AfterTest
private void aftertestng(){
System.out.println("==========@AfterTest===========");
}
}
package com.javaTestest.casetest;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
public class Utils {
public static List<NameValuePair[]> read(String path) {
List<NameValuePair[]> list = new ArrayList<NameValuePair[]>();
try {
Workbook wb = WorkbookFactory.create(new File(path));
//获取需要的sheet 下标0表示第一个sheet
Sheet sheetAt = wb.getSheetAt(0);
//获得此sheet的总行数
int endRow = sheetAt.getPhysicalNumberOfRows();
for (int rowNum = 1; rowNum < endRow; rowNum++) {
Row row = sheetAt.getRow(rowNum);
// String city = row.getCell(2) == null?"":row.getCell(2).setCellType(CellType.STRING).getStringCellValue();
// cellCity.setCellType(CellType.STRING);
//如果获取execl中的值为string类型,可以统一用 .toString 数字1读取变成1.0的情况可以设置 数据-分列-下一步到第三步选择文本 如图:
String city = row.getCell(2) == null?"":row.getCell(2).toString();
String key = row.getCell(3) == null?"":row.getCell(3).toString();
System.out.println(rowNum+"========"+city+"============="+key);
if("" == city){
continue;
}
NameValuePair[] nvp = {new NameValuePair("city",city),new NameValuePair("key",key)};
list.add(nvp);
}
// sheetAt.getRow(arg0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}
5.1 @DataProvider 为数据提供者,返回的数据类型必须与@Test方法接收的类型一致
@Test(dataProvider = "getDatas") dataProvider不设置默认就是@DataProvider的方法名,想设置名字的话就@DataProvider(name="dp") 那么@Test(dataProvider = "dp")
传入多组数据,会对应执行多次@Test中的方法:
@DataProvider 方法出参是List,@Test方法会将List中的值遍历去执行测试方法
5.2 使用poi来读取execl
引入poi的pom:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
数字1读取变成1.0的情况可以设置 数据-分列-下一步到第三步选择文本 如图:
