读取测试用例

一直我们都没有考虑过读取测试用例的事,我们现在这样设计测试用例有两个好的点,在执行方法时,打印测试用例,方便知道执行的内容是什么,在报告展示时,把测试用例的结果展示出来

实现方案:目前我们demo使用读取excel的报方式,把测试用例读取出来,然后再来展示,大概读取的case内容就是这样,注意sheet名,目前我创建是与类名相同,方便读取excel数据,原本是使用app做为演示,但是app出现一个问题,后期演示框架我直接使用PC的selenium做为演示,app除了启动那不一样,所有用到的内容和pc是一样的,我新建了一个包和一个类,如图:

并在项目下新建了一个文件夹叫testcase,下面放着测试用例,

testcase案例如下图,注意sheet名,我是和项目名相同

实现

1. 在publicmethod类(类中是公共方法)中 写读取Excel内容,并返回一个map

public static Map<String, List> readTestCase(String className, String xlsFileName) {

Map<String, List> map = new HashMap<String, List>();

List<String[]> list = new ArrayList<String[]>();

Workbook rwb = null;

Cell cell = null;

InputStream stream;

try {

stream = new FileInputStream(projectPath + "/testCase/" + xlsFileName + ".xls");

rwb = Workbook.getWorkbook(stream);

} catch (FileNotFoundException e) {

logTest.logError("读取excel出现异常,请检测名称是否对应正确或其他异常!!!");

e.printStackTrace();

} catch (BiffException e) {

logTest.logError("读取excel出现异常,请检测名称是否对应正确或其他异常!!!");

e.printStackTrace();

} catch (IOException e) {

logTest.logError("读取excel出现异常,请检测名称是否对应正确或其他异常!!!");

e.printStackTrace();

}

Sheet sheet = rwb.getSheet(className);

int rows = sheet.getRows();//获取的行

int coumn = sheet.getColumns();//获取的列

String[] strkey = new String[rows - 1];// 存取testCase的值

for (int i = 1; i < rows; i++) {

String[] strValue = new String[coumn - 1];// 存取每一行的数据

strkey[i - 1] = sheet.getCell(0, i).getContents();

for (int j = 1; j < coumn; j++) {

strValue[j - 1] = sheet.getCell(j, i).getContents();

}

list.add(strValue);

}

// 把行的数据加入map中

for (int i = 0; i < strkey.length; i++) {

map.put(strkey[i], Arrays.asList(list.get(i)));

}

return map;

}

  2. 在新增加了一个方法用于打印测试方法

*

* @测试点: 获取方法名,并打印方法

@param @param getcase 获取的测试数据,也就是获取读取excel后的数据

@param @param methodName 方法名

* @备注: void

* @author zhangjun

* @date 2017年9月15日

@修改说明

*/

public static void getTestCase(Map<String, List> getcase,String methodName){

try {

List checkCase=getcase.get(methodName);

logTest.logInfo("测试项:"+checkCase.get(1));

logTest.logInfo("测试描述:"+checkCase.get(2));

logTest.logInfo("验证点:"+checkCase.get(3));

} catch (Exception e) {

logTest.logWarn("没有获取到方法名"+e.getMessage());

}

3. 使用方式,我们创建的testng的监听中使用,因为这样做 1.在执行前测试方法前就读取测试用例 2.在用例成功或者失败后,都打印测试用例的测试点,监听请查看文章《appuim项目实战---监听testng》

@Override
public void onStart(ITestContext testContext) {
super.onStart(testContext);
String projectName = testContext.getSuite().getName();//获取当前的项目名称 getTestcases=publicmethod.readTestCase(projectName, "rosewholesale");//sheet名一直是用我们
logTest.logInfo("【" + testContext.getName() + " Start】"); }
@Override
public void onTestFailure(ITestResult tr) {
super.onTestFailure(tr);
publicmethod.getTestCase(getTestcases, tr.getName());
}
@Override
public void onTestSuccess(ITestResult tr) {
super.onTestSuccess(tr);
publicmethod.getTestCase(getTestcases, tr.getName());
}

  

4. testng配置

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="rosewholePC" >
<listeners>
<listener class-name="until.TestngListener" />
<listener class-name="until.RetryListener" />
</listeners>
<test name="version" preserve-order="true"> <classes>
<class name="seleniumdemo.rosewholePC">
<methods>
<include name="choose_product"/>
<include name="choose_product2"/>
<include name="choose_product3"/>
</methods>
</class>
</classes> </test>
</suite>

5. rosewholePC类中的代码

package seleniumdemo;

import java.util.Arrays;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.relevantcodes.extentreports.ExtentReports;
import until.logTest; public class rosewholePC {
WebDriver driver;
@BeforeClass
public void beforeClass(){ System.setProperty("webdriver.chrome.driver", "driver/chromedriver.exe"); #注意这里是驱动地址
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
capabilities.setCapability("chrome.switches", Arrays.asList("--incognito"));
ChromeOptions options = new ChromeOptions();
options.addArguments("--test-type");
capabilities.setCapability("chrome.binary", "driver/chromedriver.exe");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
driver = new ChromeDriver(capabilities);
driver.get("https://www.rosewholesale.com/");
}
@Test
public void choose_product(){
driver.findElement(By.xpath("//li[3]/a[@class='nav_t']")).click();
String geturl=driver.getCurrentUrl();
if(geturl.contains("cheap")){
logTest.logInfo("进入到women页面成功");
}else{
logTest.logError("进入到women页面失败");
Assert.assertTrue(false);
}
} @Test
public void choose_product2(){
logTest.logInfo("进行第二个case的验证。。。。。。。。。。。。。。****");
driver.findElement(By.xpath("//*[@id='js_proList']/ul/li[1]/p[1]/a[1]/img")).click();
WebElement addtobag=driver.findElement(By.xpath("//div[@class='pro_propertyBtn clearfix']"));
if(addtobag!=null){
logTest.logInfo("进入到商品详情页");
} }
@Test
public void choose_product3(){
logTest.logInfo("我模拟一个错误的操作");
Assert.assertTrue(false); } }

  

selenium项目--读取测试用例的更多相关文章

  1. TFS - 使用微软测试管理器实现跨团队项目的测试用例管理

    在团队项目之间实现测试用例和测试计划的共享,是很多客户关注的问题.尤其在开发产品+服务的团队中,对测试用例的共享要求比较高.下面就如何在Team Foundation Server中如何实现团队项目之 ...

  2. ASP.NET Core实现类库项目读取配置文件

    前言 之前继续在学习多线程方面的知识,忽然这两天看到博问中有个园友问到如何在.net core类库中读取配置文件,当时一下蒙了,这个提的多好,我居然不知道,于是这两天了解了相关内容才有此篇博客的出现, ...

  3. SpringMVC项目读取不到外部CSS文件的解决办法及总结

    昨天,在写一个新需求的时候,因为没有前端同事的对接,无奈只有自己写css,js放到ssm结构的后台项目中,因为之前开发都是把前端文件放在一个专门的服务器上,一直没有关注服务端项目读取静态资源的问题,运 ...

  4. .Net Core库类项目跨项目读取配置文件

    在项目开始之前我们可以先去了解一下IConfiguration接口,.Net Core Web应用程序类似于一个控制台,当程序运行到Startup时会自动注入IConfiguration,默认读取当前 ...

  5. centos7.4 64位安装 google-chrome 与 chromedriver 运行 Python selenium 项目

    centos7.4 实例 利用 yum 命令安装 google-chrome 超级简单(安装最新版): yum install https://dl.google.com/linux/direct/g ...

  6. Python+selenium之读取配置文件内容

    Python+selenium之读取配置文件内容 Python支持很多配置文件的读写,此例子中介绍一种配置文件的读取数据,叫ini文件,python中有一个类ConfigParser支持读ini文件. ...

  7. IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题

    IT咨询顾问:一次吐血的项目救火   年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...

  8. 项目读取数据,一直出现 Closing connections idle longer than 30 SECONDS,卡死现象

    项目读取数据,一直出现 Closing connections idle longer than 30 SECONDS,卡死现象. 我的是在读取oracle数据的时候出现这种错误. 可以参考这篇文章 ...

  9. 封装properties从配置文件读取测试用例输入数据

    当每个测试用例都有输入数据,而且数据量比较大的情况,可以采取从文件读取 如果想让同一套测试用例能够适应相似的输入数据,如果直接代码里面来回切换回可能会漏,而且还需要debug检错 可以把一些公用的输入 ...

随机推荐

  1. python+splinter实现12306网站刷票并自动购票流程

    python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...

  2. SElinux学习记录

    1.SELinux:是一种基于域类型模型的强制访问控制安全系统,由NSA编写设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SE Linux补丁 查看Selinux: ps -Z #查看S ...

  3. 转 python 的常用函数replace, split(),enumerate() 函数

    1.execmd = "su - " + ou + " -c 'sqlplus / as sysdba << EOF\n " + execmd3 + ...

  4. HTTP的请求头标签 If-Modified-Since

    一直以来没有留意过HTTP请求头的IMS(If-Modified-Since)标签. 最近在分析Squid的access.log日志文件时,发现了一个现象.就是即使是对同一个文件进行HTTP请求,第一 ...

  5. SpringBoot初始教程之Servlet、Filter、Listener配置详解

    1.介绍 通过之前的文章来看,SpringBoot涵盖了很多配置,但是往往一些配置是采用原生的Servlet进行的,但是在SpringBoot中不需要配置web.xml的 因为有可能打包之后是一个ja ...

  6. RTT之内存管理及异常中断

    内存管理分静态内存管理和动态内存管理(根据大小又分2种) 静态内存管理:创建.删除.初始化.解绑.申请和释放.初始化内存池是属于静态内存管理,与创建内存池不同的是,此处内存池对象所使用的内存空间是由用 ...

  7. Trees on the level UVA - 122 (二叉树的层次遍历)

    题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...

  8. 性能测试工具LoadRunner24-LR之Analysis 系统资源分析

    1.内存分析方法 内存分析方法主要是用于判断系统有无遇到内存瓶颈,是否需要通过增加内存等手段提高系统性能表现.主要计数器包括Memory和Physical Disk类别的计数器 内存分析的主要步骤和方 ...

  9. instancemethod, staticmethod, classmethod & abstractmethod

    实例方法.静态方法.类方法.抽象方法 1.  Python中方法的工作方式(How methods work in Python) A method is a function that is sto ...

  10. B树和B+树对比,为什么MySQL数据库索引选择使用B+树?

    一 基础知识 二叉树 根节点,第一层的节点 叶子节点,没有子节点的节点. 非叶子节点,有子节点的节点,根节点也是非叶子节点. B树 B树的节点为关键字和相应的数据(索引等) B+树 B+树是B树的一个 ...