一、测试用例
上文铺垫了基础知识。
二、性能测试
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/类名-小时分钟秒毫秒.png
SimpleDateFormat 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