硒并行测试-运行同一类中的2种方法

时间:2019-01-11 17:37:10

标签: java selenium parallel-processing testng

我有一个Java类,可打开两个Chrome浏览器,分别搜索“ test 1”和“ test 2”。但是,一旦两个浏览器都打开,只有一个带有google页面的浏览器将搜索“ test 1 test 2”。

我相信这个问题可能是因为我从父类中调用driver = new WebDriver。但是,我不确定如何解决该问题。

这是我尝试并行运行的两种方法。

class wroom(Thread):
def run(self):
    UDP_PORT_NO = 6789
    UDP_IP = '192.168.2.255'
    while 1:
        try:
            clientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            while 1:
                time.sleep(2)
                clientSock.sendto('test'), (UDP_IP, UDP_PORT_NO))

        except:
            pass

这是我用来调用它们的xml文件。

package webDrivertests;

public class googleTestClass extends Methods{

    @Test
    public void test1() throws InterruptedException {

        googleTestClass object1;
        object1 = new googleTestClass();
        object1.launchBrowser();
        object1.goToURL("https://www.google.com");
        object1.enterValue("name","q","google test 1");
        driver.quit();
    }

    @Test
    public void test2() throws InterruptedException {

        googleTestClass object2;
        object2 = new googleTestClass();
        object2.launchBrowser();
        object2.goToURL("https://www.google.com");
        object2.enterValue("name","q","google test 2");
        driver.quit();
    }
}

包含驱动程序的父方法

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="methods">
  <test thread-count="2" name="Test" parallel="methods">
    <classes>
      <class name="webDrivertests.googleTestClass"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

当前结果:打开两个浏览器,每个浏览器都访问google.com。但是,只有一个浏览器将搜索“ test 1 test 2”。任何帮助表示赞赏!如果可能的话,我仍想使用父类“方法”,因为它包含许多用于其他实际测试用例的方法。

谢谢。

2 个答案:

答案 0 :(得分:0)

问题出在您的测试代码上。 WebDriver对象被声明为静态对象。

因此,这将导致每个测试方法共享同一实例。

要解决此问题,请从man sched_getaffinity类的WebDriver声明中删除static关键字,然后重试。

答案 1 :(得分:0)

由于在类中对驱动程序对象进行了IF OBJECT_ID('TEMPDB..#TBLVehicles') IS NOT NULL DROP TABLE #TBLVehicles; CREATE TABLE #TBLVehicles ( VehicleId INT ); INSERT INTO #TBLVehicles VALUES (100),(101),(102),(103),(104),(105); IF OBJECT_ID('TEMPDB..#TBLTrips') IS NOT NULL DROP TABLE #TBLTrips; CREATE TABLE #TBLTrips ( VehicleId INT ,StartDate DATE ,Odometer INT ); INSERT INTO #TBLTrips VALUES (100,'2018-01-12',100 ) ,(101,'2018-05-12',1000 ) ,(101,'2018-05-12',1010 ) ,(103,'2018-05-12',500 ) ,(103,'2018-06-12',505 ) ,(105,'2018-06-12',0 ) ,(105,'2018-06-12',0 ); DECLARE @SQLString NVARCHAR(MAX) DECLARE @DateArray VARCHAR(MAX) DECLARE @StartDate DATE='2018-01-12' DECLARE @EndDate DATE='2018-06-12' IF OBJECT_ID('TEMPDB..#Dates') IS NOT NULL DROP TABLE #Dates; CREATE TABLE #Dates ( Date DATE ); WHILE @StartDate<=@EndDate BEGIN INSERT INTO #Dates SELECT @StartDate SET @StartDate = DATEADD(DAY,1,@StartDate) END SELECT @DateArray=ISNULL(@DateArray+',','')+'['+CAST(Date AS VARCHAR)+']' FROM #Dates ; SET @SQLString= ' WITH CTE AS ( SELECT V.VehicleId ,T1.Date ,CASE WHEN T2.Odometer IS NULL THEN 0 ELSE 1 END OdometerKey FROM #TBLVehicles V LEFT JOIN FROM #Dates T1 ON 1=1 LEFT JOIN #TBLTrips T2 ON V.VehicleId = T2.VehicleId AND T1.Date=T2.StartDate ) SELECT * FROM CTE PIVOT (SUM(OdometerKey) FOR Date IN ('+@DateArray+') ) PVT '; EXEC SP_EXECUTESQL @SQLString --PRINT(@SQLString) 声明,因此当第二个测试调用launchBrowser()时,它将被覆盖并行执行。

显然,删除static可以解决此问题,但是随着测试床和方法的增加,您仍然会遇到管理驱动程序的其他问题。

我建议使用TestNG extension中满足此类要求的任何一个。我们正在使用QAF,它基于TestNG构建,并提供驱动程序管理,资源管理以及许多其他功能,这些功能对于Web /移动/ Web服务测试至关重要。