一、测试用例
上文铺垫了基础知识。
https://blog.csdn.net/m0_74876421/article/details/141307905https://blog.csdn.net/m0_74876421/article/details/141307905
二、性能测试
1.准备功能: 浏览器驱动以及selenim包
引入依赖:在pom.xml文件中添加
<dependencies><dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version></dependency></dependencies>
2.根据功能与要求划分出不同的包
例如:
common包中有:
1、创建相关的驱动driver。
2、在关键节点进行屏幕截图。创建截图时,注意保存的文件格式,以防文件覆盖。例如:时间/类名/方法名-小时分钟秒毫秒来表示。
3、注意在创建webDriver时,要进行设置配置,允许访问所有链接。同时,设置在查找元素时隐式等待。
package common;import io.github.bonigarcia.wdm.WebDriverManager;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Duration;//创建驱动
//创建截屏
public class Utils {public static WebDriver driver;//创建驱动public static WebDriver createDriver() {if (driver == null) {WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();options.addArguments("--remote-allow-origins=*");driver = new ChromeDriver(options);driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(3));}return driver;}public Utils(String url) {driver = createDriver();if(url.length()>0) {driver.get(url);}}//创建截屏public void screenPhoto(String str) throws IOException {File file = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);//image/nian-yue-ri/类名-小时分钟秒毫秒.pngSimpleDateFormat dirTime = new SimpleDateFormat("yyyy-MM-dd");SimpleDateFormat fileTime = new SimpleDateFormat("HHmmssSS");String dirFile = dirTime.format(System.currentTimeMillis());String srcFile = fileTime.format(System.currentTimeMillis());String[] prevFile = str.split("-");String prev = prevFile[0];String next = prevFile[1];String fileName = "./src/test/image/" + dirFile + '/' + prev+'/'+next + '-' + srcFile + ".png";FileUtils.copyFile(file, new File(fileName));}}
3.使用driver来访问页面,进行后续操作。
具体的测试用例可根据上文的功能测试进行操作。
测试:输入正确的用户名、密码,查看是否跳转到主页面。
public void loginSuccess() {//页面刷新driver.navigate().refresh();String methodName = "";//获取方法名try {methodName = targetclass.getMethod("loginSuccess").getName();} catch (NoSuchMethodException e) {throw new RuntimeException(e);}//查找用户名输入框并输入用户名driver.findElement(By.cssSelector("#username")).sendKeys("zhangsan");//查找密码输入框并输入密码driver.findElement(By.cssSelector("#password")).sendKeys("123456");//点击提交按钮driver.findElement(By.cssSelector("#submit")).click();//屏幕截图try {screenPhoto(LoginPage.class.getName() + "-" + methodName);} catch (IOException e) {throw new RuntimeException(e);}//判断是否登陆成功driver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)"));try {screenPhoto(LoginPage.class.getName() + '-' + methodName);} catch (IOException e) {throw new RuntimeException(e);}}
(1)注册页面、登陆页面
1.查看注册页面是否可以打开、是否为注册页面。
2.查看登陆页面是否可以打开、是否为登陆页面。
3.根据测试用例进行操作,查看是否符合预期。
(2)主页面
1.是否为主页面
(3)书写
1.在书页面,点击写作品,找到输入框后,输入内容,点击提交,处理弹窗,跳转主页,查看作品是否提交成功。
2.提交失败,不输入内容,处理弹窗,查看弹窗信息,并查看是否为原页面。
(4)更新
1.点击更新,输入内容,提交,找到更新后的文章,查看是否更新后的文章是否与输入的内容一致。
2.不是自己的作品能否更新。
(5)公开、私密
1.找到公开按钮,点击,处理弹窗后,按钮是否更新为私密。
2.找到私密按钮,点击,处理弹窗后,按钮是否更新为公开。
(6)查看私密作品与个人作品
跳转至个人作品页面,查看作品详情。
跳转至私密作品页面,查看作品详情,查看状态是否为私密状态。
(7)注销
点击注销,查看是否跳转至登陆页面,访问主页,是否依旧跳转至登陆页面。
(8)删除
点击删除,跳转作品详情,查看是否能访问。
(9)未登陆时,测试各种页面是否可以查看
注意:
1.在线秘密基地,并没有实现页面跳转,所有在书写代码时,注意方法的执行顺序,以及页面值和浏览器的状态。
2.在处理弹窗时,若已处理过,但代码报错,可在处理弹窗加入显示等待,来保证浏览器执行到了该页面。
3. 在页面跳转时,仅可能在必要节点加入刷新操作,已避免输入的信息进行拼接。
4.在书写代码时,尽可能写日志,来放映自动化代码执行的结果。
5.使用css选择器时,尽可能在原页面查找多次,以防为动态元素。
6.注意删除,删除后数据就没了,下次重新执行时,可能会产生bug。
测试结果:
但测试结果没有问题时,可以将浏览器配置为无头模式,运行代码,根据结果来分析做自动化。
secret_test: 在线秘密基地_自动化测试https://gitee.com/miniini/secret_test