慕测web安全测试软件下载及使用

本次web测试比赛主要分为三个部分,使用Selenium编写自动化测试脚本,使用Jmeter编写性能测试脚本,使用Appium编写移动应用测试脚本。

在写这篇随笔的时候Selenium环境已经配好了,相对也比较简单,所以这边稍微提一下。

Selenium编写自动化测试脚本

下载eclipse,下载chorm版本对应的chormdriver,下载安装Selenium包

然后通过Selenium编写如下图所示的自动化脚本进行测试:

image-20221011155254675

Selenium定位不到指定元素原因之iframe(unable to locate element)

切换iframe

selenium提供了switch_to.frame()方法来切换frame

// 方法:1:根据iframe的id或name切换
	driver.switchTo().frame("needit");
	driver.switchTo().frame("ueditor_0");

注意:

可能你会这样写:switch_to_frame(),但会发现,这段代码被加上“删除线”了;

原因是这个方法已经out了,之后可能被废弃,建议switch_to.frame()

switch_to****.frame(reference)中的reference是传入的参数,用来定位frame,可以传入id、name、index以及selenium的WebElement对象。

如下图中的 id、name。

如果没有id、name属性的化,可以通过xpath匹配WebElement对象进行定位。

img

	// 方法:1:根据iframe的id或name切换
	driver.switchTo().frame("needit");
	driver.switchTo().frame("ueditor_0");
	// 切出iframe
	driver.switchTo().defaultContent();

	// 方法2:把iframe当作页面元素进行切换
	WebElement iframe1 = driver.findElement(By.cssSelector("iframe.needit"));
	driver.switchTo().frame(iframe1);
	WebElement iframe2 = driver.findElement(By.cssSelector("iframe[frameborder='0']"));
	driver.switchTo().frame(iframe2); 
	// 切出iframe
	driver.switchTo().defaultContent();
	
	// 方法3:将iframe存储到list中,然后根据ifrane的索引定位 
	List<WebElement> iframeElements = driver.findElements(By.tagName("iframe"));
	System.out.println("iframe List的长度是:"+iframeElements.size());
	driver.switchTo().frame(0); 
	driver.switchTo().frame(1);
	// 切出iframe
	driver.switchTo().defaultContent();

Selenium-java 登录后重定向页面(页面跳转后)刷新页面

driver.switch_to.window(wins[-1]) #列表最后一个是最新的窗口

public static void main(String[] args) {
		// 打开浏览器访问目标网页
		System.setProperty("webdriver.chrome.driver", "webdriver/chromedriver.exe");
		WebDriver driver = new ChromeDriver();
		driver.get("https://www.baidu.com");
		driver.manage().window().maximize();
		driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
		// 新开浏览器窗口
		driver.findElement(By.xpath("//a[text()='新闻']")).click();

		// 只有两个窗口时,通过窗口的句柄是否等于默认窗口判断是否切换
		String mainHandle = driver.getWindowHandle();
		Set<String> Handles = driver.getWindowHandles();
		for (String hand : Handles) {
			if (!hand.equals(mainHandle)) {
				driver.switchTo().window(hand);
				break;
			}
		}
		System.out.println("切换后的新窗口是:" + driver.getTitle());

		// 切回原窗口,点击打开新的窗口
		driver.switchTo().window(mainHandle);
		driver.findElement(By.xpath("//a[text()='hao123']")).click();

		// 此时已有三个浏览器窗口,通过窗口title判断
		Set<String> Handles1 = driver.getWindowHandles();
		for (String hand : Handles1) {
			if (driver.switchTo().window(hand).getTitle().equals("hao123_上网从这里开始")) {
				driver.switchTo().window(hand);
				break;
			}
		}
		System.out.println("切换后的新窗口是:" + driver.getTitle());

		driver.quit();
	}

selenium使用已打开的浏览器

在使用selenium的时候,通常都是在后台默默的执行操作,但是有的时候会想要让selenium直接使用当前已经打开的浏览器

我这里只尝试了Google Chrome

首先,需要从命令行启动google-chrome,并添加参数

chrome --remote-debugging-port=9222

然后在打开的浏览器中,就可以作为爬虫的浏览器,比如,可以访问某一个地址

然后使用selenium直接接管当前浏览器,进行操作


ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("debuggerAddress", "127.0.0.1:9222");
//        options.addArguments("proxy-server=http://10.11.11.11:1234");
//        options.addArguments("disable-notifications");
//        options.addArguments("disable-popup-blocking");
//        options.addArguments("disable-extensions");
//        options.addArguments("disable-infobars");
//        options.addArguments("start-maximized");
//        options.setPageLoadStrategy(PageLoadStrategy.NONE);
      
WebDriver driver = new ChromeDriver(options);
System.out.println(driver.getTitle());

这个时候,输出的就是当前已打开浏览器打开的界面了

鼠标悬停操作

import org.openqa.selenium.interactions.Actions;

WebElement settings = driver.findElement(By.xpath("//*[@id='u1']/a[8]"));
Actions action = new Actions(driver);
action.moveToElement(settings).perform();

JMeter编写性能测试脚本

JMeter的下载相对上面的自动化脚本环境要相对简单,就是一个jar包。但是使用起来却比自动化脚本的编写复杂很多。上面自动化脚本就是简单的java脚本编写。

Thread Group

  1. 线程数:模拟的用户数量

  2. Ramp-up Period(in seconds):达到指定线程数所需要的时间。

    在调度器复选框被选中的前提下:

    1. 持续时间(秒):在此选项填入N,说明这个计划,从某个开始时间 算起,执行N秒后结束。(会忽略结束时间的选项)

    2. 启动延迟(秒):在此选项填入N,手动点击开始执行计划,然后延 迟N秒后,计划才真正开始执行。(会忽略 启动时间的选项)

    3. 启动时间:当点击开始测试时,将等到此处填写的启动时间,然后真 正开始测试。

    4. 结束时间:当开始测试时,将等到指定的开始时间开始测试,然后会 停在此处填写的时间点结束。

Transaction Controller

事务控制器会产生一个额外的取样器(sampler),用来计算衡量它所包 含的所有测试组件(比如包含2个http采样器)的总体时间

HTTP(S) Request

使用BadBoy或者使用Jmeter自带的HTTP代理服务抓取请求。

Synchronizing Timer

Number of Simulated Users to Groupby: 每次释放的线程数量。如果设置为0,等于设置为线程租中的线程数量。

CSV Data Set Config

实现请求参数化。

  1. Filename:文件路径(包括目录和文件名),CSV文件使用相对路径, 和脚本放在同一级目录下
  2. File encoding:编码方式,建议utf-8,为了防止存在中文时乱码
  3. Variable Names(Comma-delimited):设置变量名,供其他功能 调用。如果存在多个变量 时,用,隔开
  4. Delimiter(use“\t” for tab):是指在提取有多个参数时,在文 件中已那个符号为分界点,进行提取
  5. Recycle on EOF:是否循环读取文件中的参数,设置为True,在循环 数超过数据时,会再次从第一条开始读取;设置为False,在读取到最 后一条 后,不再从第一条开始读取数据;
  6. Stop thread on EOF?:是否在读取完最后一条数据后,停止线程;
  7. Sharing mode:共享方式;一般使用默认就行(所有线程共享),可根据实际需求修改

Appium编写移动应用测试脚本

1.安装node.js(0.8版本及以上)

安装完成后,运行cmd(或其他终端),输入node –v,如果安装成功,会输出版本信息

2.配置Java环境

3.配置Android sdk环境

可以使用Android sdk managerhttp://www.androiddevtools.cn/。

我直接下了个Android studio,一步到位。

配置环境变量

export ANDROID_HOME=/Users/sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

4.安装Appium

brew install Appium

打开appium客户端

adb连接虚拟机

>adb connect 127.0.0.1:62001

https://www.cnblogs.com/mik-hello/p/15308261.html安卓xpath定位

image-20221022090301320

appium 连接 夜神模拟器自动化

https://blog.51cto.com/u_15354476/5342062

appPackage和appActivity获取:

首先在android手机或模拟器上打开App,输入下面的abd命令:

adb shell dumpsys window windows | findstr mFocusedApp
posted @ 2023-04-03 10:48  dre0m1  阅读(157)  评论(0编辑  收藏  举报