前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于LangChain手工测试用例转App自动化测试生成工具

基于LangChain手工测试用例转App自动化测试生成工具

原创
作者头像
霍格沃兹测试开发Muller老师
发布于 2024-09-19 09:48:56
发布于 2024-09-19 09:48:56
19600
代码可运行
举报
运行总次数:0
代码可运行

在传统编写 App 自动化测试用例的过程中,基本都是需要测试工程师,根据功能测试用例转换为自动化测试的用例。市面上自动生成 Web 或 App 自动化测试用例的产品无非也都是通过录制的方式,获取操作人的行为操作,从而记录测试用例。整个过程类似于

但是通常录制出来的用例可用性、可维护性都不强,而且依然需要人手工介入录制的过程。

LLM 问世之后,我们便在探索,是否有第二种可能性,由大模型执行功能测试用例,生成自动化测试用例?

在前面的章节 基于 LangChain 手工测试用例转 Web 自动化测试生成工具中,给大家讲解了手工用例转 Web 自动化测试用例的过程,而 App 自动化测试用例生成的原理也基本类似。

应用价值

测试工程师在编写用例的过程中,将操作步骤明确的表达出来。即可通过大模型将功能测试用例可以直接转为 App 自动化测试用例。极大的节省了人力与资源。

实践演练

实现原理

整个实现原理如下图所示:

实现思路
测试用例规范与要求

如果想要将功能用例转换为自动化测试用例,那么对功能测试用例则需要清晰,明确的表达出来每个操作步骤。如果测试用例本身就表达的含糊不清,那么自然大模型是无法识别它需要进行的具体的操作步骤的。

如下所示,为一个测试步骤。在这些测试步骤中,具体打开哪些页面,输入哪些信息,点击哪些按钮都清晰的表达了出来。

代码语言:bash
AI代码解释
复制
打开  app activity ".Settings" , app package com.android.settings
2. 点击 Battery
3. 获取 Battery 的电量
4. 返回上一级页面
通过 AGENT 执行功能测试用例。

大模型本身是不具备任何执行能力或生成能力的,它只会”思考“,但是通过 LangChain 的 Agent,可以将一些”工具”外挂到大模型身上。

那么如果要执行这些功能测试用例,大模型就需要具备执行用例的能力。而我们要做的事情,就是将 tools(工具包),外挂到大模型上面。

相关知识点:Agent、 tools

  • 封装好 App 的底层工具
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
from time import sleep
from appium import webdriver
from appium.options.android import UiAutomator2Options
from appium.webdriver.common.appiumby import AppiumBy

class AppAutoFramework:
    def __init__(self):
        self.driver = None
        self.element = None

    def init(self, app_activity, app_package):
        if not self.driver:
            # 设置 capability
            caps = {
                # 设置 app 安装的平台(Android、iOS)
                "platformName": "android",
                # 设置 appium 驱动
                "appium:automationName": "uiautomator2",
                # 设置设备名称
                "appium:deviceName": "emulator-5554",
                "appium:noReset": True,
                # 设置以下两个参数来控制启动app和关闭掉app
                "appium:forceAppLaunch" : True,
                "appium:shouldTerminateApp" : True,
                # 设置 app 的包名
            "appium:appPackage": app_package,
                # 设置 app 启动页
            "appium:appActivity": app_activity
            }
            # 初始化 driver
            self.driver = webdriver.Remote(
                "http://localhost:4723",
                options=UiAutomator2Options().load_capabilities(caps)
            )
            self.driver.implicitly_wait(5)
        return self.source()

    def source(self):
        return self.driver.page_source

    def find(self, locator):
        print(f"find xpath = {locator}")
        element = self.driver.find_element(by=AppiumBy.XPATH, value=locator)
        self.element = element
        return self.source()

    def click(self):
        self.element.click()
        sleep(1)
        return self.source()

    def send_keys(self, text):
        self.element.clear()
        self.element.send_keys(text)
        return self.source()

    def back(self):
        self.driver.back()
        return self.source()
  • 创建工具以及其说明,并且将工具绑定到工具包中
代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import time

from langchain_core.tools import tool

app = AppAutoFramework()


@tool
def init(app_activity, app_package):
    """
    打开app的安装包,并返回app的resource
    """
    return app.init(app_activity, app_package)


@tool
def find(xpath: str):
    """通过xpath定位元素"""
    return app.find(xpath)


@tool
def click(xpath: str = None):
    """以xpath的方式定位网页元素后点击"""
    app.find(xpath)
    return app.click()


@tool
def send_keys(xpath, text):
    """定位到xpath指定的元素,并输入text"""
    app.find(xpath)
    return app.send_keys(text)


@tool
def sleep(seconds: int):
    """等待指定的秒数"""
    time.sleep(seconds)


@tool
def back():
    """
    返回上一级界面
    :return:
    """
    app.back()


tools = [init, find, click, send_keys, sleep, back]
记录执行步骤

在 Agent 的配置中,可以要求 agent 将所有的执行步骤记录下来。而执行记录会记录在返回结果中的intermediate_steps中。

而我们则需要将这些步骤取出来,按照我们的需求记录下来。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
# 获取执行结果
import json
from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
from langchain_core.agents import AgentAction
from langchain_openai import ChatOpenAI

from app.appium_tools import tools

prompt = hub.pull("hwchase17/structured-chat-agent")
llm = ChatOpenAI()
app_agent = create_structured_chat_agent(llm, tools, prompt)
# Create an agent executor by passing in the agent and tools
app_agent_executor = AgentExecutor(
    agent=app_agent, tools=tools,
    verbose=True,
    return_intermediate_steps=True,
    handle_parsing_errors=True)

query = """
你是一个自动化测试工程师,接下来需要根据测试步骤,
每一步如果定位都是根据上一步的返回的html操作完成
执行对应的测试用例,测试步骤如下
1. 打开  app activity ".Settings" , app package com.android.settings
2. 点击 Battery
3. 获取 Battery 的电量
4. 返回上一级页面
"""

def execute_result(_):
    # 获取执行结果
    r = app_agent_executor.invoke({"input": query})
    # 获取执行记录
    steps = r["intermediate_steps"]
    steps_info = []
    # 遍历执行步骤,获取每一步的执行步骤以及输入的信息。
    for step in steps:
        action = step[0]
        if isinstance(action, AgentAction):
            steps_info.append({'tool': action.tool, 'input': action.tool_input})
    return json.dumps(steps_info)


if __name__ == '__main__':
    print(execute_result(""))
生成自动化测试用例。

拥有执行步骤之后,可以将执行步骤传递给大模型,然后让大模型根据执行步骤直接生成 web 自动化测试用例。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
prompt_testcase = PromptTemplate.from_template("""
你是一个app自动化测试工程师,主要应用的技术栈为pytest + appium。
以下为app自动化测试的测试步骤,测试步骤由json结构体描述

{step}

{input}

""")

chain = (
        RunnablePassthrough.
        assign(step=execute_result)
        | prompt_testcase
        | llm
        | StrOutputParser()
)

print(chain.invoke({"input": "请根据以上的信息,给出对应的app自动化测试的代码"}))
执行效果

最后,自动生成的 App 自动化测试用例效果如下:

总结

  1. App 自动化测试用例生成工具需求说明。
  2. 如何通过 LangChain 实现 App 自动化测试用例生成工具。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
WP-PostViews Plus统计插件在TwentyTen主题下的使用
为了博客的文章浏览统计,让我这个不怎么熟悉 PHP 的菜鸟硬是从昨晚折腾到现在! 主要原因是我不太熟悉 PHP 的结构,结果被网上的教程搞得云里雾里,通过度娘搜到关于WP-PostViews Plus
张戈
2018/03/26
1K0
WordPress浏览次数统计插件:WP-PostViews Plus
wp-postviews-plus,该插件可以统计每篇文章的浏览次数,根据展示次数显示历史最热或最衰的文章排行、展示范围可以是全部文章和页面,并且启用插件后自动在外观-小工具中生成浏览数排行的小工具,你可以把它拖到边栏中构建阅读排行、热门收藏等待栏目。wp-postviews-plus 可以设置统计对象:任何人、匿名访客、已登录用户,可以排除统计蜘蛛爬虫。最新版的wp-postviews-plus已经支持缓存并且已经支持中文,即使你使用了 WP Super Cache 等缓存插件缓存,它照样可以正常统计。
zhangdd
2018/08/01
1.7K0
wordpress显示文章浏览量&&显示阅读排行榜-用插件实现
WP-PostViews 插件可轻松实现文章阅读数统计功能,而且还可以实现侧边栏 Widget 以及显示最受欢迎(阅读数最多)文章、某分类下最受欢迎(阅读数最多)文章等功能。
超级小可爱
2023/02/17
1.8K0
WordPress阅读量作弊随机增加教程
本教程是为了解决那些刚刚创建的网站,被访客浏览时,网站文章阅读量数字显示个位或是十位数的尴尬,以下内容只针对于主题安装或是集成了wp-postviews插件的wordpress主题,通过以下wordpress插件的修改方法与wordpress主题的修改方法实现流量爆棚的效果。经测试,完美兼容dux主题。
主机测评
2019/04/26
2.1K0
WordPress阅读量作弊随机增加教程
inove主题 wp-postviews 后续完善.显示阅读次数
作者:matrix 被围观: 3,634 次 发布时间:2011-07-16 分类:Wordpress 兼容并蓄 | 一条评论 »
HHTjim 部落格
2022/09/26
2750
使用 WP-Postviews 统计日志浏览次数
WP-Postviews 是我一直推荐的插件之一,它可以在统计每篇日志被浏览的次数,通过对每篇日志的统计,这样我就可以知道哪些日志受读者欢迎,并且可以实现博客日志流量 Top 10 等功能,非常方便和强大。并且最新版的 Postviews 还支持缓存,在你的博客使用 WP Super Cache 等缓存插件缓存之后,它照样还可以进行统计。
Denis
2023/04/15
7090
解决启用WP-Super-Cache后出现的几个问题
近期,随着新版互推联盟自适应 iframe 代码的推出,调用的博友也慢慢增加了 ,这是很高兴的事情,也有博友反应调用的这个页面加载会有点慢。我来说明一下,因为这个互推联盟这个页面是纯动态页面,也就是每次刷新都要重新从数据库查询并输出,而且随着成员越来越多,这加载速度也会越来越慢,而且,对玛思阁的服务器也会造成更大的负载。这是一个需要解决的问题。 第一时间,我就想到使用静态缓存此页面的方法来解决加载过慢的问题。于是就安装了 WP-Super-Cache 这个插件,并根据实际情况设置了下,发现效果还不错!但还是
张戈
2018/03/23
2.8K0
解决启用WP-Super-Cache后出现的几个问题
如何给WordPress添加阅读计数
显示文章的阅读次数对 SEO 是有很大好处的,因为每次点击都会对文章进行一次小小的更新,我们可以用 WP-PostViews 这个插件来实现这个功能。
超超不会飞
2020/10/28
9810
如何给WordPress添加阅读计数
WPJAM Basic一键式全站优化插件WordPress
WPJAM Basic 我多年来一直喜欢水煮鱼博客WordPress 一键式全站优化插件,WPJAM Basic 有三个主要功能:
Hello-1
2022/08/30
9160
WordPress 如何统计并显示文章阅读量?
WP-PostViews 是一款免费且简洁的 WordPress 浏览量统计插件,截止本文发稿,有超过十万的站点正在使用。
轩辕镜像
2024/09/29
6750
WordPress 如何统计并显示文章阅读量?
安装WP-PostViews Plus插件,显示文章的阅读次数
启用WP-PostViews Plus插件 插件后,可以显示每篇文章的浏览次数,不用去查看外挂统计了。
星哥玩云
2022/06/11
5920
安装WP-PostViews Plus插件,显示文章的阅读次数
WordPress非插件添加文章浏览次数统计功能
本文最后更新于2021年9月6日,已超过1年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!
回忆大大
2023/03/09
8080
WordPress后台删除wp-postviews插件文章浏览次数被清空
之前一直使用wp-postviews插件来统计文章浏览次数,考虑到使用wp-postviews插件要修改排版和样式会比较麻烦,于是就决定不再使用插件实现文章浏览次数,直接免插件实现Wordpress文章浏览阅读次数。
文曦
2022/06/24
6910
WordPress后台删除wp-postviews插件文章浏览次数被清空
Next -4- 增加站点访客、文章阅读量、字符统计、阅读时间统计与对应词条翻译
本文介绍增加Next主题文章阅读数量和访客数量的方法。 不蒜子站点访客、文章阅读量 修改主题配置文件不蒜子enable的开关为true: # Show Views / Visitors of the website / page with busuanzi. # Get more information on http://ibruce.info/2015/04/04/busuanzi busuanzi_count: enable: true total_visitors: true
为为为什么
2022/08/04
7180
Next -4- 增加站点访客、文章阅读量、字符统计、阅读时间统计与对应词条翻译
解决网站静态缓存后WP-PostViews插件不计数的问题
突然发现文章浏览计数功能失效了,文章发了几个月才几十上百的浏览数,本以为是因为最近发的文章都比较冷门,不受欢迎。但是发布了几个月,才不到 2 百的访问量,这就不合理了。 一、发现问题 于是花时间分析了
张戈
2018/03/26
1.3K0
解决网站静态缓存后WP-PostViews插件不计数的问题
WordPress 自定义字段(Custom Fields)详细介绍和使用
我们在使用 WordPress 撰写日志或者页面的时候,都会在编辑框下面看到自定义字段(Custom Fields),那么什么是自定义字段呢?这个 WordPress 自定义字段又是干什么的?
Denis
2023/04/14
3.7K0
WordPress 自定义字段(Custom Fields)详细介绍和使用
WordPress免插件仅代码实现文章浏览次数的方法(1)
在WordPress中为每一篇文章提供个“浏览次数”计数,一来可以间接地给访客一种文章有价值的暗示,二来方便自己获取相关数据(访客的内容偏好等等),三貌似想不到了。实现文章浏览次数很多人使用如wp-postviews 这类WordPress插件,但是使用wordpress的一条黄金准则是“少用插件,能用代码实现不用插件”。网络上有不少方法,现在提供一下目前本站正在使用的方法: 原理:通过自定义字段来保存浏览次数,每执行一次主循环loop,数据+1。 一、将下面的代码丢入主题下的funtions.php的文件
Jeff
2018/01/19
1K0
如何美化自己的博客,wordpress 主题编辑入门教程。
学习本文的知识前提:略懂html和css,已经能搭建一个wordpress的博客。搭建不会的请看我的《关于配置lamp和wordpress》。本文不是高手教程,不过是自己在美化优化博客的过程中,边学边记录而已。
十四君
2019/11/24
3.6K0
GeneratePress主题如何添加文章浏览量(阅读量),详细教程
GeneratePress主题如何添加文章浏览量(阅读量),刚开始使用GeneratePress主题的小伙伴可能遇到这种问题,面对GeneratePress的模板一头雾水,因为模板里面都是一堆参数代码,不像国内那些主题模板有div标签,能够识别自行修改添加标签。这恰恰就是GeneratePress主题的强大之处,一旦你熟悉了操作,你可以为此添加修改主题外观的任何地方。
超级小可爱
2023/02/20
8120
晒一晒本站所用插件
WordPress作为建站程序,用的人多、技术文章多、主题多、插件多,其中插件对新手的诱惑很大,本人刚接触Wordpress 时也与众多新手一样没技术没经验,除了到处找主题模板,就是返来复去安装测试各种插件,最多时后台安装二、三十个,最后连自己都不知道这些插件是干麻用的了。可能新手总是好奇想知道我这个老鸟都用什么插件,那就晒一晒本站所用插件:
星哥玩云
2022/08/13
4150
推荐阅读
相关推荐
WP-PostViews Plus统计插件在TwentyTen主题下的使用
更多 >
LV.1
腾讯高级工程师
目录
  • 应用价值
  • 实践演练
    • 实现原理
    • 实现思路
      • 测试用例规范与要求
      • 通过 AGENT 执行功能测试用例。
      • 记录执行步骤
      • 生成自动化测试用例。
    • 执行效果
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档