Selenium编写自动化用例的8种技巧

这篇具有很好参考价值的文章主要介绍了Selenium编写自动化用例的8种技巧。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在开始自动化时,您可能会遇到各种可能包含在自动化代码中的方法,技术,框架和工具。有时,与提供更好的灵活性或解决问题的更好方法相比,这种多功能性导致代码更加复杂。在编写自动化代码时,重要的是我们能够清楚地描述自动化测试的目标以及我们如何实现它。话虽如此,编写“干净的代码”以提供更好的可维护性和可读性很重要。编写干净的代码也不是一件容易的事,您需要牢记许多最佳实践。以下主题突出显示了编写更好的自动化代码应获得的8条银线。

1.命名约定

当我们从手动转向自动化或实际上以任何编程语言编写代码时,这确实是要牢记的经验法则之一。遵循正确的命名约定有助于更轻松地理解代码和维护。此命名约定暗含变量,方法,类和包。例如,您的方法名称应特定于其用途。“ Register_User()”方法描述了在该方法中显示用户注册的方法。明确定义的方法名称增加了脚本的易于维护和可读性。这同样适用于变量命名。我注意到许多人提到变量为a,b,c等,甚至将Web元素称为Weblelement1,Webelement2等。这样一来,用户看不到变量名与预期的一样。

以下是显示命名错误的示例:

 1public void Register_User() throws InterruptedException
 2    {
 3        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
 4        driver.get("https://www.lambdatest.com/ ");
 5        driver.manage().window().maximize();
 6        WebElement web1= driver.findElement(By.xpath("//a[text()='Free Sign Up']"));
 7        web1.click();
 8        WebElement web2=driver.findElement(By.xpath("//input[@name='organization']"));
 9        web2.sendKeys("LambdaTest");
10        WebElement web3=driver.findElement(By.xpath("//input[@name='first_name']"));
11        web3.sendKeys("Test");
12        WebElement web4=driver.findElement(By.xpath("//input[@name='last_name']"));
13        web4.sendKeys("User");
14        WebElement web5=driver.findElement(By.xpath("//input[@name='email']"));
15        web5.sendKeys("sadhvi.singh@navyuginfo.com");
16        WebElement web6=driver.findElement(By.xpath("//input[@name='password']"));
17        web6.sendKeys("TestUser123");
18        WebElement web7=driver.findElement(By.xpath("//input[@name='phone']"));
19        web7.sendKeys("9412262090");
20        WebElement web8=driver.findElement(By.xpath("//button[text()='SIGN UP']"));
21        web8.click();
22        Thread.sleep(3500);
23
24    }   

 

上面的代码显示了“ method1”如何不向用户提供任何线索,就像该方法的确切作用一样。另外,所有的web元素都通过web1,web2等表示。用户无法识别哪个Web元素捕获了哪个字段。

对于上述相同的代码,可以如下标记正确的表示方式:

 1public void Register_User() throws InterruptedException
 2    {
 3        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
 4        driver.get("https://www.lambdatest.com/ ");
 5        driver.manage().window().maximize();
 6        WebElement link= driver.findElement(By.xpath("//a[text()='Free Sign Up']"));
 7        link.click();
 8        WebElement organization=driver.findElement(By.xpath("//input[@name='organization']"));
 9        organization.sendKeys("LambdaTest");
10        WebElement first_name=driver.findElement(By.xpath("//input[@name='first_name']"));
11        first_name.sendKeys("Test");
12        WebElement last_name=driver.findElement(By.xpath("//input[@name='last_name']"));
13        last_name.sendKeys("User");
14        WebElement email=driver.findElement(By.xpath("//input[@name='email']"));
15        email.sendKeys("sadhvi.singh@navyuginfo.com");
16        WebElement password=driver.findElement(By.xpath("//input[@name='password']"));
17        password.sendKeys("TestUser123");
18        WebElement phone_number=driver.findElement(By.xpath("//input[@name='phone']"));
19        phone_number.sendKeys("9412262090");
20        WebElement button=driver.findElement(By.xpath("//button[text()='SIGN UP']"));
21        button.click();
22        Thread.sleep(3500);
23        String url= driver.getCurrentUrl();
24        assertEquals("fail- unable to register", url, "https://accounts.lambdatest.com/user/email-verification");
25
26    }

在这里,方法名称'Register_User'通过名称明确定义了用户,指示该方法包含与用户注册相关的代码。同样,所有Web元素或变量都具有与用于定义意图的捕获字段相关的名称。

通常,通常鼓励使用驼峰式大小写来记录方法或变量,因为它在可读性和维护脚本方面更加清晰。

2.减少,重用和回收

确保将您的方法分解到用户场景的最小块上非常重要。它们应涵盖简单和单一的流程。不要让您的方法与单一方法涵盖的多个功能过于复杂。例如,登录功能需要在应用程序上注册用户。将您的注册功能保留在另一个方法中,如果需要,请在登录方法中调用该方法。降低方法的复杂度可简化代码的可维护性。

另外,在需要的地方重复使用您的方法,请勿将相同的代码复制粘贴到不同的方法中。这导致代码中不必要的重复和冗余。增加代码行并不意味着您已经编写了不错的代码。重构和优化代码是编写稳定,健壮和更好的自动化代码的关键。

回收也是编写更好的自动化代码的另一个有用技巧。我有经验丰富的人员可以自动化遗留系统,不倾向于在自动化框架中更改现有方法,而不会在现有功能发生变化时重写另一种方法。这只是使框架变得脆弱。每当流程改变时,总是要更新现有方法,尽管它有其自身的挑战,即新用户可能不知道该方法可能具有的依赖性,但是我认为我们应该始终以长远的眼光来看待问题,而不是实现那些较短的目标。。

下面是一个示例,说明如何将登录代码简化为一小部分功能,并使用了另一种注册方法来简化整个过程。

 1@Test
 2    public void Register_User() throws InterruptedException
 3    {
 4        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
 5        driver.get("https://www.lambdatest.com/ ");
 6        driver.manage().window().maximize();
 7        WebElement link= driver.findElement(By.xpath("//a[text()='Free Sign Up']"));
 8        link.click();
 9        WebElement organization=driver.findElement(By.xpath("//input[@name='organization']"));
10        organization.sendKeys("LambdaTest");
11        WebElement first_name=driver.findElement(By.xpath("//input[@name='first_name']"));
12        first_name.sendKeys("Test");
13        WebElement last_name=driver.findElement(By.xpath("//input[@name='last_name']"));
14        last_name.sendKeys("User");
15        WebElement email=driver.findElement(By.xpath("//input[@name='email']"));
16        email.sendKeys("sadhvi.singh@navyuginfo.com");
17        WebElement password=driver.findElement(By.xpath("//input[@name='password']"));
18        password.sendKeys("TestUser123");
19        WebElement phone_number=driver.findElement(By.xpath("//input[@name='phone']"));
20        phone_number.sendKeys("9412262090");
21        WebElement button=driver.findElement(By.xpath("//button[text()='SIGN UP']"));
22        button.click();
23    }   
24
25    @Test
26    public void Login_User()
27    {
28
29          driver.get("https://accounts.lambdatest.com/login");
30          driver.findElement(By.xpath("//input[@name='email']")).sendKeys("User2@gmail.com");
31          driver.findElement(By.xpath("//input[@name='password']")).sendKeys("TestUser123");
32          driver.findElement(By.xpath("//button[@class='sign-up-btn']")).click();
33
34    }
35
36    @AfterClass
37    public static void BrowserClose()
38    {
39
40        driver.quit();
41    }
42
43
44    }

 

3.合理地组织测试

好的,这确实是确保更好的自动化代码的主要可操作见解之一。它不仅易于理解,而且在维护上无需花费太多精力。从长远来看,借助框架来构建测试可以增加工作价值,并减少维护工作。您可以通过使用由JUnit和TestNG之类的框架提供的注释来控制应用程序的流程。例如,使用@BeforeClass之类的注释可以帮助您指导耗时的活动,例如连接到数据库,设置浏览器等与此方法相关的代码以及与此相关联的@BeforeClass注释。这可以帮助自动化测试仪立即知道该方法的确切功能以及何时调用该方法。试想一下,您的设置过程很清楚,并且已从代码的其他部分中整理出来。

下面的示例突出显示了通过TestNG框架展示了一种更好的结构化方法:

 1import static org.junit.Assert.*;
 2
 3import java.util.concurrent.TimeUnit;
 4
 5import org.openqa.selenium.By;
 6import org.openqa.selenium.WebDriver;
 7import org.openqa.selenium.WebElement;
 8import org.openqa.selenium.chrome.ChromeDriver;
 9import org.testng.annotations.AfterClass;
10import org.testng.annotations.BeforeClass;
11import org.testng.annotations.Test;
12
13public class Lamdatest {
14
15    static WebDriver driver;
16
17    @BeforeClass
18    public static void BrowserOpen()
19    {
20        System.setProperty("webdriver.chrome.driver", "chromepath"); 
21        driver= new ChromeDriver() ;
22        driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
23    }
24
25    @Test(priority=1)
26    public void Register_User() throws InterruptedException
27    {
28        driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
29        driver.get("https://www.lambdatest.com/ ");
30        driver.manage().window().maximize();
31        WebElement link= driver.findElement(By.xpath("//a[text()='Free Sign Up']"));
32        link.click();
33        WebElement organization=driver.findElement(By.xpath("//input[@name='organization']"));
34        organization.sendKeys("LambdaTest");
35        WebElement first_name=driver.findElement(By.xpath("//input[@name='first_name']"));
36        first_name.sendKeys("Test");
37        WebElement last_name=driver.findElement(By.xpath("//input[@name='last_name']"));
38        last_name.sendKeys("User");
39        WebElement email=driver.findElement(By.xpath("//input[@name='email']"));
40        email.sendKeys("sadhvi.singh@navyuginfo.com");
41        WebElement password=driver.findElement(By.xpath("//input[@name='password']"));
42        password.sendKeys("TestUser123");
43        WebElement phone_number=driver.findElement(By.xpath("//input[@name='phone']"));
44        phone_number.sendKeys("9412262090");
45        WebElement button=driver.findElement(By.xpath("//button[text()='SIGN UP']"));
46        button.click();
47        String url= driver.getCurrentUrl();
48        assertEquals("fail- unable to register", url, "https://accounts.lambdatest.com/user/email-verification");
49
50    }   
51
52    @Test(dependsOnMethods="Register_User") 
53    public void Login_User()
54    {
55
56          driver.get("https://accounts.lambdatest.com/login");
57          driver.findElement(By.xpath("//input[@name='email']")).sendKeys("User2@gmail.com");
58          driver.findElement(By.xpath("//input[@name='password']")).sendKeys("TestUser123");
59          driver.findElement(By.xpath("//button[@class='sign-up-btn']")).click();
60
61    }
62
63
64
65    @AfterClass
66    public static void BrowserClose()
67    {
68
69        driver.quit();
70    }
71
72
73    }

 

确定哪些注释应该与哪种测试方法相关联是很重要的。通过明确的依赖关系和优先级,可以根据应用程序的流程来构造测试和代码。

4.全面验证您的测试

作为质量检查人员,您要做的就是验证您的预期和实际满足情况,这与您的自动化代码相同。如果您的脚本不符合验证要求,那么创建一个脚本将毫无意义,也没有任何意义。理想情况下,每个用户操作都应该像测试用例步骤一样进行验证,无论它是在验证元素的可见性,还是要记住版式提示,文本表示形式,页面重定向或任何形式的视觉验证,甚至是关于评估数据库的结果。

即使您的验证无法确定,也会显示失败消息,以便您可以找出问题所在。我们在验证代码方面犯的最大错误是从确保验证通过的角度编写。我们从未考虑过如果代码失败或未达到预期效果会发生什么,那么继续下去将需要什么。

如果您希望在验证失败后立即中断测试并跳至另一测试,则可以使用硬断言,而如果您希望在同一页面上验证多个检查,则可以选择软断言。决定完全使用哪个断言取决于用例。

以下是在登录页面上执行的断言示例。在此方法中,将创建一种方法,其中使用有效凭据登录用户,然后使用另一种方法确保用户不会使用无效凭据登录并显示错误消息。

 1//validate user able to login with valid credentials
 2        @Test
 3        public void Login_User() throws IOException
 4        {
 5
 6            driver.get("https://accounts.lambdatest.com/login");
 7            driver.findElement(By.xpath("//input[@name='email']")).sendKeys("User2@gmail.com");
 8            driver.findElement(By.xpath("//input[@name='password']")).sendKeys("TetsUser123");
 9            driver.findElement(By.xpath("//button[@class='sign-up-btn']")).click();
10              WebDriverWait wait= new WebDriverWait(driver, 15);
11              wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//a[@class='user-profile dropdown-toggle']"))));
12              String Current_url= driver.getCurrentUrl();
13              Assert.assertEquals("https://accounts.lambdatest.com/user/email-verification", Current_url);
14              System.out.println("user logged in sucesfully");
15              driver.findElement(By.xpath("//a[@class='user-profile dropdown-toggle']")).click();
16              driver.findElement(By.xpath("//a[contains(text(),'Logout')]")).click();
17            }
18
19
20
21        //validate user is unable to login with invalid credentials
22                @Test
23                public void Login_invalid_User() throws IOException
24                {
25
26                      driver.get("https://accounts.lambdatest.com/login");
27                      driver.findElement(By.xpath("//input[@name='email']")).sendKeys("User21@gmail.com");
28                      driver.findElement(By.xpath("//input[@name='password']")).sendKeys("TestUser123");
29                      driver.findElement(By.xpath("//button[@class='sign-up-btn']")).click();
30                      WebDriverWait wait= new WebDriverWait(driver, 15);
31                      String str= driver.findElement(By.xpath("//p[@class='error-mass']")).getText();
32                      String Current_url= driver.getCurrentUrl();
33                      Assert.assertEquals("https://accounts.lambdatest.com/login", Current_url);
34                      System.out.println(str);
35                }

 

覆盖多个验证检查的方法可能有所不同,或者您可以像我上面所做的那样为每个验证选择不同的方法,或者可以选择在try-catch块下的单个方法中进行所有验证。

5.sleep不能改善稳定性

我们倾向于相信的最大神话,尤其是当我们刚接触自动化领域时,是通过为脚本提供足够的等待量,必要或不必要的等待会导致脚本顺利执行。相反,它使脚本不稳定,并增加了总体执行时间。这种静态睡眠的主要问题是,我们不了解运行测试的机器的负载,因此可能导致超时。因此,应避免使用thread.sleep来维护更好的自动化代码。对脚本使用等待的一种更好的方法是通过条件绑定,其中脚本可以像人类一样等待直到满足特定条件。例如,等待直到某个元素可见或不可见。

作为开发更好的自动化代码的一种选择,显式和流畅的等待更加适应。

6.进行测试,数据驱动

在对多种形式的数据进行测试时,测试变得更加有效,当编写更好的自动化代码以测试Web应用程序或任何其他软件时,测试也是如此。在自动化中,关键是通过多种形式的数据测试测试代码,而不是为每个数据编写不同的测试脚本。这可以通过数据驱动的测试框架轻松实现。它有助于将测试数据输入存储到外部数据库中,例如CSV文件,excel文件,文本文件,XML文件甚至是ODBC存储库。此数据被调用到脚本中,并一次又一次地运行在相同的测试代码中。与手动工作相比,这有助于减少冗余并加快执行速度。发现新的bug。这种方法的另一个好处是,它减少了您可能必须添加的测试脚本的数量,从而加快了测试周期。

与之保持同步,它还有助于简化脚本的可维护性。如果应用程序发生任何更改,代码中的所有硬编码值都可能会中断。实现此目的的一种更简单的方法是将所有硬编码组件设置为变量驱动。例如,通过将它们各自的值存储在excel工作表中并在脚本中调用它们,可以使所有定位器都不受代码限制。万一您的任何定位器损坏了,您只需要在excel中更改定位器的值即可,而根本不需要触摸脚本。

数据驱动测试的一个基本示例是:

 1        public void Login_User() throws IOException
 2        {
 3
 4            File f1= new File("C://Users//navyug//Desktop//Test.xlsx");
 5            FileInputStream scr= new FileInputStream(f1);
 6            XSSFWorkbook book= new XSSFWorkbook(scr);
 7            XSSFSheet sheet=book.getSheetAt(0);
 8            for(int i=0; i<=sheet.getLastRowNum(); i++ )
 9            {
10                //XSSFCell cell= sheet.getRow(i).getCell(1);
11             Row row = sheet.getRow(i);
12             Cell cell = row.getCell(0);
13
14              driver.findElement(By.xpath("//input[@name='email']")).sendKeys(cell.toString());
15              cell= row.getCell(1);
16
17              driver.findElement(By.xpath("//input[@name='password']")).sendKeys(cell.toString());
18
19
20            driver.findElement(By.xpath("//button[@class='sign-up-btn']")).click();
21              WebDriverWait wait= new WebDriverWait(driver, 15);
22              wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//a[@class='user-profile dropdown-toggle']"))));
23              String Current_url= driver.getCurrentUrl();
24              Assert.assertEquals("https://accounts.lambdatest.com/user/email-verification", Current_url);
25              System.out.println("user logged in sucesfully");
26              takescreenshot();
27              driver.findElement(By.xpath("//a[@class='user-profile dropdown-toggle']")).click();
28              driver.findElement(By.xpath("//a[contains(text(),'Logout')]")).click();
29            }
30        }

 

上面的代码显示了从Excel获取的用于不同登录凭据的数据。对于Xpath也可以扩展同样的功能,其中XPath值也可以从excel中提取。在这里,通过数据驱动方法解决的关键点是从我们的代码中删除硬编码的值,使其成为面向变量,并使其在多组输入中运行同一段代码。

7.不要错过报告!

如果自动化代码没有向您报告结果,则该代码将无法正常工作。为了优化您作为自动化工程师的工作,重要的是要知道哪些测试代码通过了,哪些失败并附带了屏幕截图。您可以向利益相关者展示的最佳投资回报是通过报告。共享这些详细的报告可提供可见性,并减少您验证测试执行脚本的时间。您可以通过TestNG HTML报告生成,JUnit报告生成等各种技术来实现报告,也可以使用扩展库来实现报告。

下面的代码显示了一个示例,其中登录功能的完成后已截取了屏幕截图作为验证通过的证明,而下面是执行后生成的TestNG报告的示例:

 1//validate user able to login with valid credentials
 2        @Test
 3        public void Login_User() throws IOException
 4        {
 5
 6            driver.get("https://accounts.lambdatest.com/login");
 7            driver.findElement(By.xpath("//input[@name='email']")).sendKeys("User2@gmail.com");
 8            driver.findElement(By.xpath("//input[@name='password']")).sendKeys("TetsUser123");
 9            driver.findElement(By.xpath("//button[@class='sign-up-btn']")).click();
10              WebDriverWait wait= new WebDriverWait(driver, 15);
11              wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath("//a[@class='user-profile dropdown-toggle']"))));
12              String Current_url= driver.getCurrentUrl();
13              Assert.assertEquals("https://accounts.lambdatest.com/user/email-verification", Current_url);
14              System.out.println("user logged in sucesfully");
15              takescreenshot();
16              driver.findElement(By.xpath("//a[@class='user-profile dropdown-toggle']")).click();
17              driver.findElement(By.xpath("//a[contains(text(),'Logout')]")).click();
18            }
19
20        public void takescreenshot() throws IOException
21        {
22            TakesScreenshot scr= ((TakesScreenshot)driver);
23            File file1= scr.getScreenshotAs(OutputType.FILE);
24
25           FileUtils.copyFile(file1, new File("C:\\Users\\navyug\\Desktop\\Login_user.PNG")); 
26        }

 

8.不要忘记跨浏览器测试!

如今,所有Web应用程序都支持多种浏览器和版本。重要的是,您的代码应针对多个浏览器,而不是针对特定的浏览器。在特定的浏览器上运行代码会失去应用程序的跨浏览器兼容性。执行跨浏览器测试,以确保您的应用程序在所有主要浏览器上都能提供无缝的用户体验,我们可以扩展此测试的自动化范围。诸如TestNG之类的框架有助于轻松地在各种浏览器中执行测试。

下面的代码显示了如何通过TestNG在多个浏览器上运行自动化代码

 1public class crowssbrowser {
 2
 3    static WebDriver driver;
 4
 5
 6    @Parameters("browser")
 7    @BeforeClass
 8    public static void Browser_Select(String browser)
 9    {
10        if(browser.equalsIgnoreCase("firefox")) {
11
12            System.setProperty("webdriver.firefox.marionette", "geckodriverpath");
13              driver = new FirefoxDriver();
14
16
17          }else if (browser.equalsIgnoreCase("chrome")) { 
18
20
21              System.setProperty("webdriver.chrome.driver", "chromedriverpath"); 
22                driver= new ChromeDriver() ;
23          }
24
25        driver.get("https://accounts.lambdatest.com/login");
26          driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
27    }

 XML代码:

 1<?xml ve
 2rsion="1.0" encoding="UTF-8"?>
 3
 4<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 5
 6<suite name="Suite" parallel="none">
 7
 8 <test name="FirefoxTest">
 9
10 <parameter name="browser" value="firefox" />
11
12 <classes>
13
14 <class name="crowssbrowser" />
15
16 </classes>
17
18 </test>
19
20 <test name="chrometest">
21
22 <parameter name="browser" value="chrome" />
23
24 <classes>
25
26 <class name="crowssbrowser" />
27
28 </classes>
29
30 </test>
31
32</suite>

上面的代码显示了一种以浏览器为参数的方法,其中设置了不同的浏览器驱动程序。使用TestNG XML文件,我们已将参数传递为不同的浏览器,在这些浏览器上将运行用于Firefox和chrome上的登录功能的代码。

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走: Selenium编写自动化用例的8种技巧,selenium,自动化,测试工具,单元测试,功能测试,测试用例,postman

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取 

Selenium编写自动化用例的8种技巧,selenium,自动化,测试工具,单元测试,功能测试,测试用例,postman文章来源地址https://www.toymoban.com/news/detail-789489.html

到了这里,关于Selenium编写自动化用例的8种技巧的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化数据驱动|Easy POI读取接口测试用例的excel

    在做的接口自动化测试中,把测试用例维护在excel表格中,通过Easy POI把用例中的行转成实体类对象,再通过testNG的@DataProvider注解把测试用例数据传递给测试方法执行用例。 2.1 用例表格示例 2.2 实体类设计 easy poi: 通过@Excel属性能够和excel的表头映射上去 ⚠️值的注意:实体

    2024年01月23日
    浏览(53)
  • 【AltWalker】模型驱动:轻松实现自动化测试用例的生成和组织执行

    模型驱动的自动化测试(Model-Based Testing, 后文中我们将简称为MBT)是一种软件测试方法,它将系统的行为表示为一个或多个模型,然后从模型中自动生成和执行测试用例。这种方法的核心思想是将测试过程中的重点从手动编写测试用例转移到创建和维护描述系统行为的模型。

    2024年02月15日
    浏览(78)
  • 用Python编写UI自动化用例第一步from selenium import webdriver,即导入第三方驱动包时报错,高效解决办法,报错问题已解决

    问题:在PyCharm中新建一个文件,py01_test_01.py文件。编写UI自动化用例的第一步就是导入驱动(from selenium import webdriver),在已经安装selenium的情况下(pip install selenium==3.141.0),执行的时候还是报错。如下图:     原因排查过程:从报错信息,错误信息为没有找到selenium。首先查

    2024年02月12日
    浏览(67)
  • python+pytest接口自动化(12)-自动化用例编写思路 (使用pytest编写一个测试脚本)

    经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索 天气查询 ,会出现如下图所示结果: 接下来,我们以该天气查询接口为例,编写接口测试用例脚本。 针对某个功能做接口测试,首先我们需

    2024年02月04日
    浏览(55)
  • 自动化用例编写思路 (使用pytest编写一个测试脚本)

    目录 一,明确测试对象 二,编写测试用例 构造请求数据 封装测试代码 断言设置 三,执行脚本获取测试结果 四,总结 经过之前的学习铺垫,我们尝试着利用pytest框架编写一条接口自动化测试用例,来厘清接口自动化用例编写的思路。 我们在百度搜索天气查询,会出现如下

    2024年02月16日
    浏览(58)
  • Sonic-UI自动化用例编写教程与建议

           UI测试被业界列入测试金字塔的顶层,由此可见,UI测试具有单元测试、接口测试不能完成的部分,具有不可替代性。在多数情况下,UI测试的职能,是在单元测试、接口测试中业务逻辑测试充分时,致力于功能验证测试、用户行为测试、设备兼容性测试等;部分UI测试

    2023年04月08日
    浏览(78)
  • Jmeter使用之:高效组织接口自动化用例技巧

    目录 前言: 1 2 3 4 5 6 前言: 在进行接口自动化测试时,JMeter是一个非常常用的工具。它具有强大的性能和扩展性,可以用于模拟大量并发用户的请求,对接口进行压力测试和性能监测。 1 善用“逻辑控制器”中的“简单控制器”。可以把简单控制器像文件夹一样使用,通过

    2024年02月12日
    浏览(53)
  • 如何编写接口自动化框架系列通过yaml来管理测试用例(四)

    本文是接口自动化测试框架系列篇的第四篇 ,主要介绍yaml包的使用 。自动化测试的本质是将功能测试用例交给代码去 目录 1. yaml介绍? 2.python中的yaml包 3.项目中使用yaml包 4 项目总结 执行 ,测试人员往往是在自动化框架添加对应的测试用例即可(也叫测试脚本)。而维护测试

    2024年02月07日
    浏览(59)
  • Selenium+python怎么搭建自动化测试框架、执行自动化测试用例、生成自动化测试报告、发送测试报告邮件

    本人在网上查找了很多做自动化的教程和实例,偶然的一个机会接触到了selenium,觉得非常好用。后来就在网上查阅各种selenium的教程,但是网上的东西真的是太多了,以至于很多东西参考完后无法系统的学习和应用。 以下整理的只是书中自动化项目的知识内容,介绍怎么搭

    2024年02月05日
    浏览(67)
  • 使用robot+selenium创建一个UI自动化测试用例

    新建项目并安装robotframework 在pycharm-插件,输入robot搜索插件 选择Robot Framework Language Server或者Hyper RobotFramework Support安装 新建test.robot文件编写测试用例test.robot robot用例文件通常包括4个头部分:Settings, Variables, Test Cases, 和 Keywords. 不区分大小写 Settings: 1) 导入 测试库, 导入资

    2024年02月20日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包