HttpClient +Testng(2)使用testng的DataProvicer来进行数据驱动
2017-03-14 10:45
225 查看
在FirstTest.java 文件中,我们可看到请求URL、请求参数,这些都是属于测试数据。这里我们使用testng中自带的@DataProvider注解来做数据驱动,数据源文件可以是EXCEL,XML,甚至可以是TXT文本。这里我们使用EXCEL数据源。
借用该文档中的一个图来更清楚的说明这个流程
这里必须把表格第一行用来命名所有参数的名称。测试数据是从第二行开始的。
如下图所示:
1、大概流程
每个测试运行前,会先通过@DataProvider的方法来读取EXCEL中数据,该注解的方法会返回一个Object[] []。然后带@Test的测试方法,如果希望从这个 DataProvider 的接收数据,则需要标识获取数据源的dataProvider的名称,也就是这个注解的名字。那么对应的DataProvider会把读取的数据传给该test方法借用该文档中的一个图来更清楚的说明这个流程
2、创建一个Excel表格
在目录main下新建一个目录TestData,并在该目录下新建一个excel表格,直接命名为LoginTest。然后打开该文档,修改sheet页名称为login.之后把上面http请求URL、请求参数都放到excel表格中。这里必须把表格第一行用来命名所有参数的名称。测试数据是从第二行开始的。
如下图所示:
3、创建一个读取EXCEL表格的类
这里我们直接在test->java下创建一个包,命名为utl
之后在utl中创建一个类ExcelReader.java
里面的内容如下所示:
package utl; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import java.io.File; import java.io.FileInputStream; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; public class ExcelReader { /** * 读取excel文件,excel中不含合并单元格 * @param path * @param sheetName * excel表格要注意每行的最后一格不能为空 * 如果要为空,则需要手动随便填写字符,然后再按del键删除才可以 * 目前没找到这个解决办法,后续会继续查找解决办法 * @return */ public static String[][] getExpectationData(String path, String sheetName) { try { File file = new File(path); FileInputStream fis = new FileInputStream(file); POIFSFileSystem POIStream = new POIFSFileSystem(fis); HSSFWorkbook workBook = new HSSFWorkbook(POIStream); //得到工作表 HSSFSheet sheet1 = workBook.getSheet(sheetName); //得到总行数 int rowNum = sheet1.getLastRowNum(); List<String[]> results = new ArrayList<String[]>(); for (int i=1;i<=rowNum;i++){ //当前行 HSSFRow row = sheet1.getRow(i); int colNum = row.getLastCellNum(); String[] data = new String[colNum]; //当前行所有列 for (int j = 0; j < colNum; j++) { try { data[j] = getCellValue(row.getCell(j)); }catch (NullPointerException e){ //如果单元格为空的时候,则用这个来处理 data[j] = ""; } } //把data[]数组的数据存在list<[]>中 results.add(data); } fis.close(); String[][] returnArray = new String[results.size()][rowNum]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) results.get(i); } return returnArray; }catch (Exception e){ return null; } } /** * 对Excel的各个单元格的格式进行判断并转换 */ public static String getCellValue(HSSFCell cell) { String cellValue = ""; DecimalFormat df = new DecimalFormat("#"); switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: cellValue =cell.getRichStringCellValue().getString().trim(); break; case HSSFCell.CELL_TYPE_NUMERIC: cellValue =df.format(cell.getNumericCellValue()).toString(); break; case HSSFCell.CELL_TYPE_BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()).trim(); break; case HSSFCell.CELL_TYPE_FORMULA: cellValue =cell.getCellFormula(); break; default: cellValue = ""; } return cellValue; } }
4、在类FirstTest.java中创建一个含有DataProvider注解的方法
修改类FirstTest.java,在该类中添加一个方法,如下面内容:@DataProvider(name = "LoginData") public Object[][] login() { // 测试数据准备 String file = "." + File.separator + "TestData" + File.separator + "LoginTest.xls"; Object[][] records ; records = ExcelReader.getExpectationData(file, "login"); return records ; }
5、修改类FirstTest.java中的Test方法
Test方法内容如下所示:@Test(dataProvider = "LoginData") public void loginJDTest(String caseDescription,String loginURL, String uuid,String eid,String fp,String _t, String loginType,String loginname,String nloginpwd, String chkRememberMe, String authcode,String pubKey,String sa_token,String seqSid) { System.out.println("=====" + caseDescription + "====="); //创建一个httppost请求 httppost = new HttpPost(loginURL); //创建Post请求参数 List<NameValuePair> formparams1 = new ArrayList<NameValuePair>(); formparams1.add(new BasicNameValuePair("uuid",uuid)); formparams1.add(new BasicNameValuePair("eid",eid)); formparams1.add(new BasicNameValuePair("fp",fp)); formparams1.add(new BasicNameValuePair("_t",_t)); formparams1.add(new BasicNameValuePair("loginType",loginType)); formparams1.add(new BasicNameValuePair("loginname",loginname)); formparams1.add(new BasicNameValuePair("nloginpwd",nloginpwd)); formparams1.add(new BasicNameValuePair("chkRememberMe",chkRememberMe)); formparams1.add(new BasicNameValuePair("authcode",authcode)); formparams1.add(new BasicNameValuePair("pubKey",pubKey)); formparams1.add(new BasicNameValuePair("sa_token",sa_token)); formparams1.add(new BasicNameValuePair("seqSid",seqSid)); try { httppost.setEntity(new UrlEncodedFormEntity(formparams1,"UTF-8")); response = httpClient.execute(httppost); entity = response.getEntity(); // 在这里可以用Jsoup之类的工具对返回结果进行分析,以判断创建是否成功 postResult = EntityUtils.toString(entity, "UTF-8"); System.out.println("查看登录接口请求返回的结果:" + postResult); } catch (Exception e) { e.printStackTrace(); } httppost.releaseConnection(); }
上面可看出,loginJDTest方法带了若干个参数,这里定义的参数要注意:
参数的个数必须和之前创建excel表格中的一样,如excel表格里面有14列参数,则这里也必须对应14个参数。而且定义参数的顺序也必须和excel表格里面参数的顺序保持一样。
6、运行程序
再次运行程序,运行结束后查看日志,一切正常,如下图所示相关文章推荐
- 使用 HttpClient 4 进行文件上传
- 使用HttpAsyncClient进行异步获取数据
- HttpClient使用HttpGet进行json数据传输
- java_HttpClient使用HttpGet进行json数据传输
- 使用POST、GET、AsyncHttpClient创造服务端用手机端来连接进行登录
- HttpClient-----4、使用HttpClient进行POST方式通信
- HttpClient +Testng(1)进行接口测试入门
- 使用HC(HttpClient)/UC(HttpURLConnection)进行网络访问的基本步骤:
- HttpClient4.x进行Get/Post请求并使用ResponseHandler处理响应
- HttpClient4.x进行Get/Post请求并使用ResponseHandler处理响应
- HttpClient4.x进行Get/Post请求并使用ResponseHandler处理响应
- 使用HC(HttpClient)/UC(HttpURLConnection)进行网络访问的基本步骤_王菲
- 反射:修改请求头HttpWebRequest/Webclient Header属性的date值-"此标头必须使用适当的属性进行修改"
- 安卓使用OkHttpClient进行网络请求
- 使用 HttpClient 4 进行文件上传
- HttpClient-----3、使用HttpClient进行GET方式通信
- 转 使用 HttpClient 4 进行文件上传
- HttpClient +Testng(3)对返回结果进行处理:json格式化,方便验证结果
- 使用loadrunner和HttpClient对163网站进行性能测试实验
- commons-httpclient.jar的使用2