testng中DataProvider为啥两组数据只执行了一组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了testng中DataProvider为啥两组数据只执行了一组相关的知识,希望对你有一定的参考价值。

package com.login.demo;

import org.testng.annotations.Test;

import io.appium.java_client.AppiumDriver;

import org.testng.annotations.DataProvider;
import org.testng.annotations.BeforeClass;

import java.io.File;
import java.net.URL;
import java.util.List;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;

public class LoginTest
private AppiumDriver driver;
@Test(dataProvider = "Authentication")
public void login(String name, String pwd) throws InterruptedException
WebElement e0 = driver.findElement(By.name("我的"));
e0.click();
WebElement e1 = driver.findElementByClassName("android.widget.ImageView");
e1.click();
List<WebElement> textFieldsList = driver.findElementsByClassName("android.widget.EditText");
textFieldsList.get(0).sendKeys(name);
textFieldsList.get(1).sendKeys(pwd);
driver.findElementById("com.example.roy.totnews:id/button").click();
Thread.sleep(3000);

@DataProvider(name = "Authentication")
public Object[][] credentials()
return new Object[][]
"12345678", "111111","12222222", "123456780",
;

@BeforeClass
public void setUp() throws Exception
// set up appium
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "app-debug.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("deviceName","d203ca2d");
capabilities.setCapability("platformVersion", "4.4.2");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "com.example.roy.totnews");
capabilities.setCapability("appActivity", "com.example.roy.totnews.ui.activity.MainActivity");
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);

@AfterClass
public void tearDown() throws Exception
driver.quit();
Thread.sleep(10000);


只执行第一组 "12345678", "111111"不执行"12222222", "123456780",

testng中传递参数可以使用@Dataprovider,这种参数主要用于指定的参数集合,但是如果是从testng外部传入参数的话,@Dataprovider则无法获得或者说无法直接获得
这种情况可以通过<parameter>标签,在testng.xml中定义参数的值。对于同一参数,可以在不同地方定义不同值,因此需要注意testng.xml中的测试范围的问题。

<suite>和<test>标签定义了suite和test两种测试范围:一个test可以包含一系列的测试方法,一个
suite可以包含多个独立的test。这两种测试范围有什么区别呢?一个test的所有测试方法都是针对同一测试对象,测试方法之间可以相互影响。而一
个suite的每个test都是针对一个单独测试对象,两个test中的测试方法不会相互影响。

在这两种测试范围定义的参数,满足如下规律:

1)在Suite范围内定义某个参数的值,对所有的Test都有效。

2)在Test范围内定义某个参数的值,只是针对该Test有效。

3)如果同时在Suite和Test中定义某个参数,Test范围的值会屏蔽Suite的值。追问

不是从外部传入,也是在一个test里,但就是只执行一组数据

参考技术A 很有可能是的数据类型不对。程序自动没有执行另一组。
排查方法:
复制被执行的数据,看看是否被多次执行。

testNG中dataprovider使用的两种方式

testNG的参数化测试有两种方式:xml和dataprovider.个人更喜欢dataprovider,因为我喜欢把测试数据放在数据库里。

一.返回类型是Iterator<Object[]>,不用管有多少组测试数据,可以抽取出来以map的id为参数作为公用的提取数据方法。

@DataProvider(name="loginData")
private Iterator<Object[]> LoginDataProvider() throws IOException {
List<Object[]> result=new ArrayList<Object[]>();
SqlSession session=DatabaseUtil.getSqlSession();
List<Object> alldata=session.selectList("loginTestAll");
Iterator it=alldata.iterator();
while(it.hasNext()){
result.add(new Object[] { it.next() });
}
return result.iterator();

}

 

二.返回类型是Object[][],明确知道有几组测试数据

@DataProvider(name="loginData")

private Object[][] LoginDataProvider() throws IOException {
Object[][] result=null;
SqlSession session=DatabaseUtil.getSqlSession();
result=new Object[][]{{session.selectOne("loginTest",1)},{session.selectOne("loginTest",2)}};
return result;
}

测试调用

@Test(groups="login",dataProvider = "loginData")

public void loginTestCase(LoginTest loginTest) throws IOException {
//用测试数据发起请求,获取响应
String response=getResult(loginTest);

//响应断言
JSONObject rj=new JSONObject(response);
String code=rj.getInt("code")+"";
Assert.assertEquals(code,loginTest.getExpected());

}

 

来源:CSDN
原文:https://blog.csdn.net/wangjie0925/article/details/80653935


以上是关于testng中DataProvider为啥两组数据只执行了一组的主要内容,如果未能解决你的问题,请参考以下文章

TestNG中DataProvider的用法

TestNG:一个@Test 有多个@DataProvider

testNg dataprovider实现读取数据库测试数据

testNG-dataprovider实现

testNG-dataprovider实现

可以将参数传递给 TestNG DataProvider?