PC自动化测试框架之自定义框架介绍(五)--扩展(java)

欢迎大家关注我的个人公众号:小朱谈软件测试,全是干货哦。

上面几篇文章讲解了对于PC自动化框架的封装,下面就具体讲解一下怎么用。

先说一下几种定位方式吧

在这里插入图片描述
扩展
在这里插入图片描述
有疑问的加V了解详情:zx1187463903

  • By.tagName()

可以通过元素的标签名称来查找元素,像是

、、这些常用的标签。该方法跟之前两个方法的区别是,这个方法搜索到的元素通常不止一个,所以一般建议结合使用findElements方法来使用。比如我们现在要查找页面上有多少个button,就可以用button这个tagName来进行查找

  • By.cssSelector()

1.根据tagName
  driver.findElement(By.cssSelector(“input”)
2.根据ID
  driver.findElement(By.cssSelector(“input#username”));html标签和#id
  driver.findElement(By.cssSelector(“#username”));只是#id
3.根据className
  单一class:driver.findElement(By.cssSelector(“.username”));.class
  复合class:driver.findElement(By.cssSelector(“.username..*”));.classA.classB
4.根据元素属性
  1)精准匹配:
    [A] driver.findElement(By.cssSelector(“input[name=username]”));属性名=属性值,id,class,等都可写成这种形式
[B] driver.findElement(By.cssSelector(“img[alt]”));存在属性。例如img元素存在alt属性
    [C] driver.findElement(By.cssSelector(“input[type=‘submit’][value=‘Login’]”));多属性
  2)模糊匹配:(正则表达式匹配属性)
    [A] driver.findElement(By.cssSelector(Input[id ^=‘ctrl’]));匹配到id头部 如ctrl_12
    [B] driver.findElement(By.cssSelector(Input[id $=‘ctrl’]));匹配到id尾部 如a_ctrl
    [C] driver.findElement(By.cssSelector(Input[id *= ‘ctrl’]));匹配到id中间如1_ctrl_1

实战来了!!!各个方法的使用,以及定位方式的使用(这里以某旅游网站为例)


	public static void main(String[] args) throws Exception {
		/*
		// 1:driver:初始化驱动
		UserFunction.driver("https://XXXXXXXXXX");
		
		// 2:activate:点击元素
		UserFunction.activate(By.className("over"));
		
		// 3:activateByIndex:点击相同属性不同位置的元素
		UserFunction.activateByIndex(By.className("over"), 1);
		UserFunction.activate(By.className("logo"));
		
		// 4:enterTextIn:输入文本信息
		UserFunction.enterTextIn(By.id("pt__search_text"), "1045201");
		
		//  5: enterTextInByText:相同属性不同位置的元素输入信息
		UserFunction.driver("http://passport.ly.com");
		UserFunction.activate(By.id("switchPcLogin"));
		UserFunction.enterTextInByIndex(By.tagName("input"), 4,"123");
		
		// 6:selectFromList:选择下拉框的元素
		UserFunction.selectFromList(By.name("adultNum"), "3");
		
		// 7:getTextFrom:获取元素的文本信息
		String text = UserFunction.getTextFrom(By.className("J_priceS"));
		System.out.println(text);
		
		// 8:getTitle:获取网页的标题
		String title = UserFunction.getTitle();
		System.out.println(title);
		
		// 9:getAttribute:根据元素性质得到另一个属性值
		String value = UserFunction.getAttribute(By.className("logo"), "title");
		System.out.println(value);
		
		// 10:getCurrentUrl:获取当前页的URL值
		String url = UserFunction.getCurrentUrl();
		System.out.println(url);
		
		// 14:key_tab:模拟键盘Tab键操作
		UserFunction.activate(By.className("over"));
		BasicFunction.sleep(3000);// 因为立即预订按钮是已存在的,但是如果资源没有加载出来,点击了立即预订的按钮也无法跳转到订单页
		UserFunction.activate(By.cssSelector("span.choose.J-Next"));// 立即预订
		UserFunction.activate(By.id("Iname"));
		UserFunction.key_tab(5);
		
		// 15:key_button:模拟键盘上下左右键操作
		UserFunction.key_button(5, "down");
		UserFunction.key_button(3, "up");
		
		// 16:switchWindow:切换窗口
		UserFunction.driver("http://www.ly.com");
		UserFunction.activate(By.className("logo"));
		UserFunction.enterTextIn(By.id("pt__search_text"), "1045201");
		UserFunction.switchWindow(1);
		UserFunction.enterTextIn(By.id("pt__search_text"), "1045201");
		
		// 17:isElementExist:判断当前页面是
		if (UserFunction.isElementExist(By.className("order-btn"))){
			System.out.println("立即预订按钮已加载完成");
		}else{
			System.out.println("元素不存在");
		}
		
		// 18:clear:清除输入框内容
		UserFunction.activate(By.className("logo"));
		UserFunction.switchWindow(1);
		UserFunction.enterTextIn(By.id("pt__search_text"), "1045201");
		UserFunction.clear(By.id("pt__search_text"));
		
		// 19:close:关闭当前窗口
		UserFunction.activate(By.className("logo"));
		UserFunction.close();
		
		// 20:quit:关闭浏览器
		UserFunction.activate(By.className("logo"));
		UserFunction.quit();
		
		// 21:refresh:刷新页面
		UserFunction.refresh();
		
		// 22:screenShot:截图
		UserFunction.screenShot(); //判断文件夹是否存在的操作
		
		// 23:screenShotSpecial:异常截图
		UserFunction.screenShotSpecial();

		// 以登录页为例,几种定位方式
		UserFunction.driver("http://passport.ly.com");
		//By.id() 通过id属性查找
		dr.findElement(By.id("switchPcLogin")).click();
		// By.name() 通过name属性查找
		dr.findElement(By.id("switchPcLogin")).click();
		dr.findElement(By.name("name")).sendKeys("18550502316");
		// By.className() 通过class属性查找
		dr.findElement(By.className("switch_corner_pc")).click();
		// By.linkText() 通过linkText(链接文本精确查找)
		dr.findElement(By.linkText("快速注册")).click();
		// By.partiallinktext()  链接文本模糊查找 
		dr.findElement(By.partialLinkText("登录页面")).click();
		// By.xpath() 通过xpath路径
		dr.findElement(By.xpath("//*[@id='switchPcLogin']")).click();
		//UserFunction.activate(By.xpath("//*[@id='switchPcLogin']"));  //copy的时候注意单双引号的问题。
		// By.cssSelector()	选择器的几种定位方式
		// By.tagName() 通过标签来查找
		List<WebElement> list=dr.findElements(By.cssSelector("input"));
		System.out.println(list.size());
		// 2:根据ID
		dr.findElement(By.cssSelector("#switchPcLogin")).click();
		// 3:根据className
		dr.findElement(By.cssSelector(".switch_corner")).click();
		dr.findElement(By.cssSelector("")).click(); //复合  立即预定按钮
		*/
	}

有疑问的加V了解详情:zx1187463903

如果这篇博客对你有帮助,欢迎扫描下方二维码,添加关注,获得更多精彩内容。在这里插入图片描述

<think>好的,我现在需要帮助用户了解性能自动化测试的工具和方法。首先,我得理清楚用户的需求。他们提到想进行性能自动化测试,寻找相关工具和方法,可能是在开发或测试过程中遇到了效率问题,想要自动化解决方案。 首先,我应该回顾一下性能自动化测试的基本概念。性能测试通常包括评估应用的响应时间、吞吐量、资源利用率等指标,而自动化测试则是通过脚本或工具自动执行这些测试,提高效率和准确性。用户可能希望了解整个流程,从工具选择到实施步骤。 接下来,我需要查阅提供的引用内容,看看有哪些相关的工具和方法被提到。引用4提到了PC端应用程序性能自动化测试的需求背景和性能指标,包括启动速度、内存、CPU、温度等指标。引用1、2、3主要讨论的是移动端和Web的自动化测试工具,比如Selenium,但用户的问题更偏向性能测试,所以可能需要重点参考引用4的内容,同时看看其他引用是否有相关工具。 引用4中提到的性能指标非常详细,比如冷启动速度的各个阶段(FP、FCP、FMP、TTI),内存和CPU的监控,以及温度监测。这可能意味着在实施性能自动化测试时,需要监控这些指标,并选择能够支持这些指标的工具。 现在,我需要确定有哪些工具可以实现这些监控。虽然引用3提到Selenium主要用于Web UI自动化测试,但性能测试可能需要其他工具,比如JMeter、LoadRunner等。不过用户提供的引用中没有直接提到这些工具,所以可能需要结合通用知识和引用中的信息。 引用4提到开发一款性能自动化工具,说明有时候可能需要自定义工具,特别是当现有工具无法满足特定需求时。但用户可能更倾向于现有的工具和方法,以减少开发成本。 接下来,我需要整理出步骤:首先明确测试目标,比如哪些性能指标;然后选择工具,可能包括开源工具如JMeter、Gatling,或者商业工具如LoadRunner;接着设计测试场景,编写脚本,执行测试并分析结果,最后持续集成。 在工具部分,引用4中的案例可能需要监控冷启动和资源使用,可能涉及系统级监控工具,如PerfMon(Windows)或top(Linux),以及APM工具如New Relic。对于自动化测试框架,可能需要结合脚本语言如Python或Shell来调用这些工具,收集数据。 此外,引用5中的sendMail方法可能涉及到测试结果的通知,比如将结果通过邮件发送,这也是自动化的一部分,确保测试结果能及时反馈。 用户可能还需要知道如何实现,比如如何编写脚本,如何集成到CI/CD流程中。例如,使用Jenkins定时执行测试脚本,收集数据并生成报告,再通过邮件发送结果。 现在需要确保回答覆盖工具、方法、实现步骤,以及可能的案例。同时要引用相关的引用内容,比如引用4中的性能指标和需求背景,说明在实际项目中如何定义测试需求。 最后,生成相关问题,帮助用户进一步探索,比如工具选择、关键指标、与功能测试的区别等。</think>### 性能自动化测试的实现方法与工具 #### 一、性能自动化测试的核心步骤 1. **明确测试目标** 根据引用[4]中提到的性能指标,需定义具体的测试目标,例如: - 冷启动速度(FP、FCP、FMP、TTI) - 内存和CPU占用 - 业务场景耗时 - 温度监控(CPU/GPU温度) - 稳定性与资源泄漏检测 2. **选择工具或开发定制化工具** - **通用性能测试工具**: - **JMeter**:支持HTTP、TCP等协议,可模拟高并发场景[^3]。 - **Gatling**:基于Scala的高性能压测工具,适合Web应用。 - **LoadRunner**:商业工具,支持复杂场景分析和资源监控。 - **系统监控工具**: - **PerfMon**(Windows)、**top/htop**(Linux):实时监控CPU、内存等。 - **Prometheus + Grafana**:用于数据采集与可视化。 - **移动端工具**: 引用[2]提到Android/iOS平台需选择专用工具,如Android Profiler、Instruments(iOS)。 3. **设计测试场景与脚本** - 模拟真实用户行为(如登录、数据加载、多任务切换)。 - 使用Python或Shell脚本调用工具API,例如通过`subprocess`模块执行命令并采集数据。 ```python import subprocess # 示例:调用JMeter执行测试计划 result = subprocess.run(['jmeter', '-n', '-t', 'test_plan.jmx'], capture_output=True) ``` 4. **自动化执行与分析** - **定时触发**:通过Jenkins、GitLab CI等工具设置定时任务。 - **结果处理**:解析日志文件,生成可视化报告(如HTML报告)。 - **异常告警**:引用[5]中的邮件功能可集成告警,例如当CPU温度超过阈值时触发通知。 5. **持续优化** - 根据测试结果优化代码或资源配置。 - 定期回归测试,确保版本迭代后性能稳定[^4]。 --- #### 二、典型工具与代码示例 1. **JMeter测试脚本(HTTP请求压测)** ```java // 通过BeanShell脚本扩展JMeter功能 vars.put("response_time", String.valueOf(prev.getTime())); ``` 2. **Python资源监控脚本** ```python import psutil # 获取CPU和内存使用率 cpu_usage = psutil.cpu_percent(interval=1) mem_usage = psutil.virtual_memory().percent ``` 3. **集成邮件通知(引用[5])** ```java // 调用sendMail方法发送测试结果 sendMail("tester@example.com", "password", "team@example.com", "性能测试报告:CPU峰值90%"); ``` --- #### 三、关键注意事项 - **环境一致性**:确保测试环境与生产环境配置相同。 - **数据隔离**:避免测试数据污染实际业务数据。 - **工具学习成本**:引用[1]建议优先选择团队熟悉的工具以降低学习成本。 --- §§ 相关问题 §§ 1. 如何选择适合移动端性能测试的工具? 2. 性能自动化测试中需要监控哪些关键指标? 3. 性能测试与功能自动化测试的主要区别是什么? 4. 如何将性能测试集成到CI/CD流水线中? [^1]: 引用[1] [^2]: 引用[2] [^3]: 引用[3] : 引用[4] [^5]: 引用[5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值