2019年2月1日星期五

性能测试基础知识

什么是性能测试?


性能测试是在各种工作量下的响应性和稳定性方面执行的非功能测试技术。性能测试测量系统的质量属性,例如可伸缩性,可靠性和资源使用情况。

性能测试的重点是检查 -
  •    速度 - 应用程序的响应时间。
  •    可扩展性 - 最大用户加载软件应用程序可以处理。
  •    稳定性 - 确定应用是否在不同的负载下稳定。

为什么性能测试?


完成性能测试以提供关于速度,稳定性和可伸缩性的应用程序的测试报告。对性能测试的影响,软件可能会遭受以下问题:运行缓慢,而几个用户同时使用它,不同操作系统的不一致可用性差。由于不存在的性能测试,绩效指标释放到市场的应用可能很可能会获得糟糕的声誉,并且未能满足预期的销售目标。

据邓恩说&Bradstreet,59%的财富500强公司每周估计1.6小时的停机时间。考虑到最低10,000名员工的普通财富500强公司每小时支付56美元,该组织的停机费用的劳动力部分每周896,000美元,每年转化为超过4600万美元。

估计只需5分钟的谷歌(19座8月)(19八八月)(19座8月13日)才能花费545,000美元的搜索巨头。

据估计,由于最近的亚马逊网络服务中断,公司损失销售额为每秒1100美元。

因此,在软件发布之前,性能测试非常重要。 

性能测试的类型

  • 负载测试 - 检查应用程序在预期用户加载下执行的能力。目标是在软件申请进入之前识别性能瓶颈。
  • 可扩展性测试 - 可扩展性测试的目的是确定软件应用程序在“缩放”中的有效性,以支持用户负载的增加。它有助于计划软件系统的容量。
  • 压力测试 - 涉及在极端工作负载下测试应用程序,以了解它如何处理高流量或数据处理。目的是识别应用程序的断裂点。
  •  耐力测试 - 完成以确保软件可以在很长一段时间内处理预期负载。
  • 卷测试 - 在体积测试下大而不是。的。数据在数据库中填充,监控整体软件系统的行为。目标是在不同数据库卷下检查软件应用程序的性能。
  • 尖峰测试 - 测试软件对用户产生的负载中的突然大尖峰的反应。 

性能测试封面 -

  • 模拟Web应用程序的实时业务用例。
  • 在预期的并发下测试应用程序。
  • 验证应用程序/服务器准备好峰值事件。
  • 在版本释放之前/以后测试应用程序以确保稳定性。 

2018年8月30日星期四

多浏览器或Testng的交叉浏览器测试

在多个浏览器中测试Web应用程序非常重要。每个浏览器都是处理代码的不同方式,因此用户体验可能不同于浏览器作为测试仪的浏览器,我们有责任确保我们的应用程序在Firefox,Chrome和IE等最常用的浏览器上罚款。 
Testng允许我们使用Testng参数自动执行多浏览器测试。在这篇文章中,我们将详细了解我们如何实现简单的例子。

例子。

1.创建一个简单的测试脚本。

2.将其配置为将浏览器类型传递为参数。

package test;


import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;
 
import org.openqa.selenium.firefox.FirefoxDriver;
 
import org.openqa.selenium.ie.InternetExplorerDriver;
 
import org.testng.annotations.AfterClass;
 
import org.testng.annotations.BeforeClass;
 
import org.testng.annotations.Parameters;
 
import org.testng.annotations.Test;
 
public class MultiBrowserTest {
 
 public WebDriver driver;
 
  @Parameters("browser")
 
  @BeforeClass
 
  // Passing Browser parameter from TestNG xml
 
  public void beforeTest(String browser) {
 
  // If the browser is Chrome, then do this
 
  if(browser.equalsIgnoreCase("chrome")) {
 
   System.setProperty("webdriver.ie.driver", "C:\\Softwares\\chromedriver_win32\\chromedriver.exe");
   
   driver = new InternetExplorerDriver();;
 
  // If browser is IE, then do this   
 
  }else if (browser.equalsIgnoreCase("ie")) { 
 
   // Here I am setting up the path for my IEDriver
 
   System.setProperty("webdriver.ie.driver", "D:\\QA\\drivers\\IEDriverServer.exe");
 
   driver = new InternetExplorerDriver();
 
  } 
 
  // Doesn't the browser type, lauch the Website
 
  driver.get("http://www.yubo666.com"); 
 
  }
 
  // Once Before method is completed, Test method will start
 
  @Test 
  public void 搜索() throws Exception {
    
   Thread.sleep(5000);
      driver.findElement(By.xpath("*//input[@class='search-field']")).sendKeys("appium");
      
      driver.findElement(By.xpath("*//input[@class='search-submit']")).click();
 
      driver.quit();
 
 
 }  
 
  @AfterClass public void afterTest() {
 
  driver.quit();
 
 }
 
}

3.在testng.xml中提及浏览器类型详细信息


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test name="ChromeTest">
 
 <parameter name="browser" value="chrome" />
 
 <classes>
 
 <class name="test.MultiBrowserTest" />
 
 </classes>
 
 </test>
 
 <test name="IETest">
 
 <parameter name="browser" value="ie" />
 
 <classes>
 
 <class name="test.MultiBrowserTest" />
 
 </classes>
 
 </test> <!-- Test -->
</suite> <!-- Suite -->

4.用它作为Testng Suit。

并行执行 - 考虑您希望在多个浏览器上并行执行测试,然后对您实现这一目标的Testng.xml进行小的更改


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="tests">
  <test name="ChromeTest">
 
 <parameter name="browser" value="chrome" />
 
 <classes>
 
 <class name="test.MultiBrowserTest" />
 
 </classes>
 
 </test>
 
 <test name="IETest">
 
 <parameter name="browser" value="ie" />
 
 <classes>
 
 <class name="test.MultiBrowserTest" />
 
 </classes>
 
 </test> <!-- Test -->
</suite> <!-- Suite -->

.

2018年8月28日星期二

Testng数据提供商与Excel

当我们想创建遵循数据驱动的方法并创建框架时,最好的方法是使用Excel存储我们的数据,并且我们可以使用我们在前一篇文章中看到的数据提供者将数据传递为参数。

步骤过程与Testng数据提供商实现Excel。

步骤1:使用Testng数据提供程序创建登录应用程序的测试用例。

第2步: 创建测试数据表。

第3步:创建函数打开&从Excel读取数据

步骤4:创建测试用例,用于使用数据提供程序从Excel接收数据。

步骤5:在测试数据文件中对测试案例名称进行测试。

使用Apache Poi库读取Excel Sheet的数据 -

下面是我们的代码,用于打开Excel表并在Selenium测试脚本中读取数据。为此目的,我们正在使用Apache Poi库,它允许我们使用Java读取,创建和编辑Microsoft Office文档。我们将要使用的类和方法从Excel表中读取数据位于org.apache.poi.hssf.usermodel中。

1.下载Apache Poi  from the link http://poi.apache.org/ 并在项目构建路径中添加它。

2.使用以下代码从Excel文件读取数据。


package test;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import org.apache.poi.xssf.usermodel.XSSFCell;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtils {

 private static XSSFSheet ExcelWSheet;

 private static XSSFWorkbook ExcelWBook;

 private static XSSFCell Cell;

 private static XSSFRow Row;

 public static void setExcelFile(String Path,String SheetName) throws Exception {
   
     try {

    // Open the Excel file

    FileInputStream ExcelFile = new FileInputStream(Path);

    // Access the required test data sheet

    ExcelWBook = new XSSFWorkbook(ExcelFile);

    ExcelWSheet = ExcelWBook.getSheet(SheetName);

    } catch (Exception e){

     throw (e);

    }

  }
 public static Object[][] getTableArray(String FilePath, String SheetName) throws Exception {

  String[][] tabArray = null;

  try {

   FileInputStream ExcelFile = new FileInputStream(FilePath);

   // Access the required test data sheet

   ExcelWBook = new XSSFWorkbook(ExcelFile);

   ExcelWSheet = ExcelWBook.getSheet(SheetName);

   int startRow = 1;

   int startCol = 1;

   int ci, cj;

   int totalRows = ExcelWSheet.getLastRowNum();

   // you can write a function as well to get Column count

   int totalCols = 2;

   tabArray = new String[totalRows][totalCols];

   ci = 0;

   for (int i = startRow; i <= totalRows; i++, ci++) {

    cj = 0;

    for (int j = startCol; j <= totalCols; j++, cj++) {

     tabArray[ci][cj] = getCellData(i, j);

     System.out.println(tabArray[ci][cj]);

    }

   }

  }

  catch (FileNotFoundException e) {

   System.out.println("Could not read the Excel sheet");

   e.printStackTrace();

  }

  catch (IOException e) {

   System.out.println("Could not read the Excel sheet");

   e.printStackTrace();

  }

  return (tabArray);

 }

 public static String getCellData(int RowNum, int ColNum) throws Exception {
 
   try{
 
    Cell = ExcelWSheet.getRow(RowNum).getCell(ColNum);
 
    int dataType = Cell.getCellType();
 
    if  (dataType == 3) {
 
     return "";
 
    }else{
 
     String CellData = Cell.getStringCellValue();
 
     return CellData;
    }
 
    }catch (Exception e){
 
    System.out.println(e.getMessage());
 
    throw (e);
 
    }
 
   
 
  }
 public static String getTestCaseName(String sTestCase)throws Exception{
   
  String value = sTestCase;

  try{

   int posi = value.indexOf("@");

   value = value.substring(0, posi);

   posi = value.lastIndexOf("."); 

   value = value.substring(posi + 1);

   return value;

    }catch (Exception e){

   throw (e);

     }

  }

 public static int getRowContains(String sTestCaseName, int colNum) throws Exception{

  int i;

  try {

   int rowCount = ExcelUtils.getRowUsed();

   for ( i=0 ; i<rowCount; i++){

    if  (ExcelUtils.getCellData(i,colNum).equalsIgnoreCase(sTestCaseName)){

     break;

    }

   }

   return i;

    }catch (Exception e){

   throw(e);

   }

  }

 public static int getRowUsed() throws Exception {

   try{

    int RowCount = ExcelWSheet.getLastRowNum();

    return RowCount;

   }catch (Exception e){

    System.out.println(e.getMessage());

    throw (e);

   }

  }
 public static Object[][] getTableArray(String FilePath, String SheetName, int iTestCaseRow)    throws Exception
  
 {   

    String[][] tabArray = null;

    try{

     FileInputStream ExcelFile = new FileInputStream(FilePath);

     // Access the required test data sheet

     ExcelWBook = new XSSFWorkbook(ExcelFile);

     ExcelWSheet = ExcelWBook.getSheet(SheetName);

     int startCol = 1;

     int ci=0,cj=0;

     int totalRows = 1;

     int totalCols = 1;

     tabArray=new String[totalRows][totalCols];

      for (int j=startCol;j<=totalCols;j++, cj++)

      {

       tabArray[ci][cj]=getCellData(iTestCaseRow,j);

       System.out.println(tabArray[ci][cj]);

      }

  }

  catch (FileNotFoundException e)

  {

   System.out.println("Could not read the Excel sheet");

   e.printStackTrace();

  }

  catch (IOException e)

  {

   System.out.println("Could not read the Excel sheet");

   e.printStackTrace();

  }

  return(tabArray);

 }
    }

 3.使用我们想要传递给我们的测试用例作为参数的数据创建屈免。


4.使用Excel使用参数更新测试用例。


package test;


import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
 
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
 
import org.testng.annotations.Test;
 
import org.testng.annotations.BeforeMethod;
 
import org.testng.annotations.AfterMethod;
 
import org.testng.annotations.DataProvider;
 

 
public class TestCaseExcelData {
 
 private String sTestCaseName;
 
 private int iTestCaseRow;
 
 WebDriver driver;
 
  @BeforeMethod
 
  public void beforeMethod() throws Exception {
 
   System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\chromedriver_win32\\chromedriver.exe");
  
   driver=new ChromeDriver();
      
      driver.get("http://www.yubo666.com");
 
      Thread.sleep(5000);
  } 
 
  @Test(dataProvider = "搜索")
  
  public void test(String searchtext) throws Exception {
 
   
      driver.findElement(By.xpath("*//input[@class='search-field']")).sendKeys(搜索text);
      
      driver.findElement(By.xpath("*//input[@class='search-submit']")).click();
 
      
  }
 
  @AfterMethod
 
  public void afterMethod() {
 
    driver.close();
 
  }
 
  @DataProvider
 
  public Object[][] 搜索() throws Exception{
 
     // Setting up the Test Data Excel file
 
   ExcelUtils.setExcelFile("C:\\Users\\manojjai\\Documents\\dataprovider.xlsx","Sheet1");
 
   sTestCaseName = this.toString();
 
    // From above method we get long test case name including package and class name etc.
 
    // The below method will refine your test case name, exactly the name use have used
 
    sTestCaseName = ExcelUtils.getTestCaseName(this.toString());
 
     // Fetching the Test Case row number from the Test Data Sheet
 
     // Getting the Test Case name to get the TestCase row from the Test Data Excel sheet
 
   iTestCaseRow = ExcelUtils.getRowContains(sTestCaseName,0);
 
     Object[][] testObjArray = ExcelUtils.getTableArray("C:\\Users\\manojjai\\Documents\\dataprovider.xlsx","Sheet1",iTestCaseRow);
 
      return (testObjArray);
 
  }
 
}

2018年7月3日星期二

testng数据提供商

当您需要传递复杂的参数例如从Java创建(复杂对象,从属性文件或数据库读取的对象,等…),在这种情况下,可以使用DataProviders传递参数。数据提供程序是使用@dataprovider注释的方法。数据提供程序返回一系列对象。

让我们使用DataProviders查看相同的搜索示例。

视频教程 -
 

怎么做 ?


1) 定义使用注释定义为DataProvider的方法SearchValue()。此方法返回对象数组数组。

2)将方法TEST()添加到DATAProvidert Class。此方法将两个字符串占用作为输入参数。

3)添加注释@Test(DataProvider =“search”)到这种方法。属性DataProvider映射到“search”.

4)运行以下代码作为Testng测试用例,然后测试将执行两次,因为我们通过两个数据值。



package test;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
 
import org.testng.annotations.DataProvider;
 
import org.testng.annotations.Test;
 
public class testng.DataProvider {
 
 private static WebDriver driver;
 
  @DataProvider(name = "搜索")
 
  public static Object[][] 搜索Value() {
 
        return new Object[][] { { "appium" }, { "selenium" }};
 
  }
 
  // Here we are calling the Data Provider object with its Name
 
  @Test(dataProvider = "搜索")
 
  public void test(String searchtext) throws Exception {
 
   System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\chromedriver_win32\\chromedriver.exe");
  
   driver=new ChromeDriver();
      
      driver.get("http://www.yubo666.com");
 
      Thread.sleep(5000);
      driver.findElement(By.xpath("*//input[@class='search-field']")).sendKeys(搜索text);
      
      driver.findElement(By.xpath("*//input[@class='search-submit']")).click();
 
      driver.quit();
  }
 
}

testng参数

正如我们都知道自动化测试中参数化的值。它允许我们多次自动运行测试用例,并使用各种输入和验证值进行多次。在创建自动化框架时,我们需要在一些努力中努力支持我们的自动化测试中的数据驱动测试。在此视频中,我们将看到我们如何使用Testng参数参数化测试用例。

testng为我们提供称为Testng参数的有趣功能。 testng让您将参数直接传递给您的TestNG.xml。

视频教程 -


怎么做?


让我在我们网站www.qaautomated.com上进行一个非常简单的搜索示例,搜索文本 需要进行身份验证。

1)创建一个测试用例以执行搜索,从而将一个字符串参数作为searchtext。

2)使用Testng注释提供SearchText作为参数。



package test;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.Test;
import org.testng.annotations.Parameters;
 
public class testng.Parameters{
 
 private static WebDriver driver;
 
  @Parameters("搜索text")
  @Test  
  public void test(String searchtext) throws InterruptedException {
 
   System.setProperty("webdriver.chrome.driver", "C:\\Softwares\\chromedriver_win32\\chromedriver.exe");
  
   driver=new ChromeDriver();
      
      driver.get("http://www.yubo666.com");
 
      Thread.sleep(5000);
      driver.findElement(By.xpath("*//input[@class='search-field']")).sendKeys(搜索text);
      
      driver.findElement(By.xpath("*//input[@class='search-submit']")).click();
 
      driver.quit();
 
  }
 
}

3)在testng.xml中提供搜索文本值


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test thread-count="5" name="Test">
   <parameter name="搜索text" value="appium"/>
    <classes>
      <class name="test.testng.Parameters"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

4)右键单击Testng.xml并以Testng Suit运行