借助AI与LangChain:一键从Excel生成智能化跨平台自动化测试代码!

news2024/10/9 17:27:16

为了实现从Excel文件中读取手工测试用例,通过LangChain生成Prompt,最终自动生成App自动化测试代码,可以按照以下步骤进行设计和实现。

步骤概览

  1. 从Excel读取手工测试用例
  2. 使用LangChain生成Prompt并解析
  3. 自动生成Appium等框架的自动化测试代码
  4. 集成自动化测试代码到测试框架中

1. 从Excel读取手工测试用例

使用pandas库读取Excel文件中的手工测试用例,假设Excel文件结构如下:

用例名称前置条件测试步骤预期结果
登录功能测试应用已启动到登录页面1. 输入用户名\n2. 输入密码\n3. 点击登录按钮跳转到主页,登录成功
搜索功能测试应用已登录到首页1. 输入搜索关键字\n2. 点击搜索按钮显示搜索结果页面

可以通过以下代码读取并解析Excel文件:

import pandas as pd

# 从Excel文件读取测试用例
def read_test_cases_from_excel(file_path):
    df = pd.read_excel(file_path)
    test_cases = []
    for index, row in df.iterrows():
        test_case = {
            "用例名称": row["用例名称"],
            "前置条件": row["前置条件"],
            "测试步骤": row["测试步骤"],
            "预期结果": row["预期结果"]
        }
        test_cases.append(test_case)
    return test_cases

2. 使用LangChain生成Prompt并解析

读取Excel中的测试用例后,使用LangChain生成Prompt,将自然语言的测试步骤和预期结果转换为自动化测试代码。

首先,生成Prompt:

# 生成LangChain使用的Prompt
def generate_prompt(test_case):
    prompt = f"""
    将以下手工测试用例转化为Appium的自动化测试代码:
    用例名称: {test_case['用例名称']}
    前置条件: {test_case['前置条件']}
    测试步骤: {test_case['测试步骤']}
    预期结果: {test_case['预期结果']}
    """
    return prompt

然后,通过LangChain模型对Prompt进行处理,生成相应的自动化测试代码。

使用LangChain时,可以将Prompt传递给预训练模型或自定义模型,输出自动化测试代码。

from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI

# 使用LangChain处理Prompt并生成自动化测试代码
def generate_automation_code(prompt):
    # 使用LangChain调用 OpenAI 模型 (这里你可以选择不同的模型)
    llm = OpenAI(temperature=0)
    response = llm(prompt)
    return response

3. 自动生成Appium自动化测试代码

解析手工测试用例后,生成具体的Appium代码,例如在Python中:

# 自动生成的Appium代码示例
def generate_appium_test_code(test_case):
    prompt = generate_prompt(test_case)
    code = generate_automation_code(prompt)
    return code

生成的代码可以包括如下内容:

from appium import webdriver

def init_driver():
    desired_caps = {
        "platformName": "Android",
        "deviceName": "emulator-5554",
        "appPackage": "com.example.app",
        "appActivity": ".LoginActivity"
    }
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    return driver

def login_test(driver):
    username_input = driver.find_element_by_id("com.example.app:id/username")
    username_input.send_keys("有效的用户名")
    
    password_input = driver.find_element_by_id("com.example.app:id/password")
    password_input.send_keys("有效的密码")
    
    login_button = driver.find_element_by_id("com.example.app:id/login_button")
    login_button.click()
    
    home_page = driver.find_element_by_id("com.example.app:id/home_page")
    assert home_page.is_displayed()

if __name__ == "__main__":
    driver = init_driver()
    login_test(driver)
    driver.quit()

4. 自动化测试代码集成

生成的Appium自动化测试代码可以自动集成到项目的测试框架中。你可以通过以下方式将生成的代码写入Python文件,供持续集成工具使用。

# 将生成的测试代码写入文件
def write_code_to_file(code, file_name):
    with open(file_name, "w", encoding="utf-8") as f:
        f.write(code)

# 示例
test_case = {
    "用例名称": "登录功能测试",
    "前置条件": "应用已启动到登录页面",
    "测试步骤": "1. 输入有效的用户名\n2. 输入有效的密码\n3. 点击登录按钮",
    "预期结果": "用户成功登录,跳转到主页"
}

code = generate_appium_test_code(test_case)
write_code_to_file(code, "test_login.py")

5. 实现整体流程

综合以上步骤,整个工具的工作流程如下:

  1. 从Excel读取测试用例
  2. 通过LangChain生成Prompt
  3. LangChain自动生成Appium的自动化测试代码
  4. 将生成的代码保存到文件中,供CI系统执行

最终,工具可以通过以下方式运行:

# 主程序:从Excel读取测试用例,生成自动化代码并保存到文件
def main():
    file_path = "test_cases.xlsx"
    test_cases = read_test_cases_from_excel(file_path)

    for i, test_case in enumerate(test_cases):
        code = generate_appium_test_code(test_case)
        file_name = f"test_case_{i+1}.py"
        write_code_to_file(code, file_name)

if __name__ == "__main__":
    main()

6. 进一步扩展

  • 支持多平台:可以根据platformName字段动态生成iOS和Android的代码。
  • 操作类型扩展:可以处理更多类型的操作(如滑动、长按、拖拽)。
  • 测试结果报告:结合现有测试框架生成测试报告,如pytestunittest
  • 数据驱动测试:结合Excel的多行数据生成数据驱动测试用例。

通过这些步骤,手工测试用例从Excel中读取后,可以使用LangChain生成Prompt并自动生成Appium等测试框架的自动化代码,实现从手工用例到自动化测试的全流程工具

第6点的扩展是实现更高级的功能,包括多平台支持、操作类型扩展、生成测试报告和数据驱动测试用例。这将使工具更具灵活性和可扩展性。以下是每个功能的详细扩展实现。

6.1 支持多平台 (iOS 和 Android)

为了支持多平台(iOS 和 Android),我们可以在生成自动化测试代码时根据平台名称动态配置。desired_capabilities中的platformName字段将决定是否生成Android或iOS的代码。

from appium import webdriver

# 初始化驱动器,根据平台生成不同的desired_capabilities
def init_driver(platform):
    if platform.lower() == "android":
        desired_caps = {
            "platformName": "Android",
            "deviceName": "emulator-5554",
            "appPackage": "com.example.app",
            "appActivity": ".LoginActivity"
        }
    elif platform.lower() == "ios":
        desired_caps = {
            "platformName": "iOS",
            "deviceName": "iPhone Simulator",
            "app": "/path/to/your.app",
            "platformVersion": "14.5",
            "automationName": "XCUITest"
        }
    else:
        raise ValueError(f"Unsupported platform: {platform}")
    
    driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
    return driver

# 示例调用
driver = init_driver("android")
6.2 扩展操作类型(如滑动、长按、拖拽等)

在测试中,除了常见的输入和点击操作外,滑动、长按、拖拽等高级操作也是必需的。Appium中支持这些手势操作。

from appium.webdriver.common.touch_action import TouchAction

# 生成滑动操作的函数
def swipe_action(driver, start_x, start_y, end_x, end_y, duration=800):
    action = TouchAction(driver)
    action.press(x=start_x, y=start_y).wait(ms=duration).move_to(x=end_x, y=end_y).release().perform()

# 长按操作
def long_press_action(driver, element, duration=2000):
    action = TouchAction(driver)
    action.long_press(el=element, duration=duration).release().perform()

# 拖拽操作
def drag_and_drop_action(driver, source_element, target_element):
    action = TouchAction(driver)
    action.long_press(source_element).move_to(target_element).release().perform()

# 示例调用
element = driver.find_element_by_id("com.example.app:id/element")
long_press_action(driver, element)
6.3 生成测试报告

为了生成测试报告,可以使用unittestpytest等框架,并集成报告生成库如pytest-html,来生成详细的测试报告。

使用unittestHTMLTestRunner来生成报告:

import unittest
from appium import webdriver
from HTMLTestRunner import HTMLTestRunner  # HTMLTestRunner可生成HTML测试报告

class AppiumTest(unittest.TestCase):
    
    def setUp(self):
        # 初始化Appium
        self.driver = init_driver("android")
    
    def test_login(self):
        driver = self.driver
        # 这里是登录测试的逻辑
        username_input = driver.find_element_by_id("com.example.app:id/username")
        username_input.send_keys("有效的用户名")
        password_input = driver.find_element_by_id("com.example.app:id/password")
        password_input.send_keys("有效的密码")
        login_button = driver.find_element_by_id("com.example.app:id/login_button")
        login_button.click()
        
        # 断言主页是否显示
        home_page = driver.find_element_by_id("com.example.app:id/home_page")
        self.assertTrue(home_page.is_displayed())

    def tearDown(self):
        self.driver.quit()

# 运行并生成HTML报告
if __name__ == "__main__":
    suite = unittest.TestLoader().loadTestsFromTestCase(AppiumTest)
    with open("report.html", "w") as f:
        runner = HTMLTestRunner(stream=f, title="Appium Test Report", description="Sample test report")
        runner.run(suite)

通过这种方式,测试完成后会生成一个report.html文件,里面包含详细的测试步骤和结果。

6.4 数据驱动测试

数据驱动测试可以通过从Excel或其他外部数据源中读取测试数据,动态执行多次测试。可以使用ddt库来实现数据驱动测试。

import unittest
from ddt import ddt, data, unpack
import pandas as pd

# 从Excel中读取数据
def get_test_data_from_excel(file_path):
    df = pd.read_excel(file_path)
    data_list = df.values.tolist()  # 转换为列表
    return data_list

# 使用ddt实现数据驱动测试
@ddt
class AppiumTest(unittest.TestCase):
    
    def setUp(self):
        self.driver = init_driver("android")
    
    # 使用ddt库实现数据驱动测试
    @data(*get_test_data_from_excel("test_data.xlsx"))
    @unpack
    def test_login(self, username, password, expected):
        driver = self.driver
        
        # 执行输入和点击操作
        username_input = driver.find_element_by_id("com.example.app:id/username")
        username_input.send_keys(username)
        
        password_input = driver.find_element_by_id("com.example.app:id/password")
        password_input.send_keys(password)
        
        login_button = driver.find_element_by_id("com.example.app:id/login_button")
        login_button.click()
        
        # 检查结果
        home_page = driver.find_element_by_id("com.example.app:id/home_page")
        if expected == "success":
            self.assertTrue(home_page.is_displayed())
        else:
            error_message = driver.find_element_by_id("com.example.app:id/error_message")
            self.assertTrue(error_message.is_displayed())

    def tearDown(self):
        self.driver.quit()

# 运行测试
if __name__ == "__main__":
    unittest.main()
6.5 自动化生成代码流程

将前面的扩展功能集成到主流程中,自动生成代码时可以根据输入决定生成哪些操作类型,并支持多平台测试。

# 自动生成的Appium代码示例,支持多平台和扩展操作
def generate_appium_test_code(test_case, platform="android"):
    prompt = generate_prompt(test_case)
    code = generate_automation_code(prompt)

    # 插入平台相关代码
    if platform.lower() == "android":
        code = code.replace("init_driver()", "init_driver('android')")
    elif platform.lower() == "ios":
        code = code.replace("init_driver()", "init_driver('ios')")

    return code
6.6 完整的自动化工具流程
def main():
    # 从Excel读取测试用例
    file_path = "test_cases.xlsx"
    test_cases = read_test_cases_from_excel(file_path)

    # 生成自动化代码并保存到文件
    for i, test_case in enumerate(test_cases):
        code = generate_appium_test_code(test_case, platform="android")
        file_name = f"test_case_{i+1}.py"
        write_code_to_file(code, file_name)
    
    # 可选: 集成到CI/CD中运行测试并生成报告

总结

通过这些扩展,工具不仅能支持Android和iOS平台,还能生成复杂的用户操作,并能够生成详细的测试报告和实现数据驱动测试。这让自动化测试工具更灵活、更强大,同时满足了更多实际测试场景的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2199576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何防止图纸外泄?图纸防泄密的六个方法(图纸安全管理措施)

图纸,作为企业技术和设计的结晶,一旦外泄,可能造成不可估量的损失。 如何有效防止图纸外泄,成为企业在信息安全管理中的重要环节。 下面我们将通过六个有趣又实用的方法,帮助你轻松实现图纸的安全管理。 1. 安企神系…

人脸表情行为识别系统源码分享

人脸表情行为识别系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

PCL 计算点云AABB包围盒(惯性矩阵)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算AABB包围盒 2.1.2 可视化点云与AABB包围盒 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与项目实战案例汇总(长…

从0打造本地聊天机器人:如何实现大模型流式输出?OpenAI+Ollama 实战

尽管有了 GPU 加持,推理速度依然很慢,怎么搞? 流式输出! 相比全部生成后再输出,流式输出生成一句就播报一句,大大减少了用户的等待时间。 主流大模型推理 API 包括: OpenAI 格式&#xff1a…

史上最浅显易懂Python教程,138页学习笔记,35个知识点一文掌握

这份笔记的目标是为了给出一份比较精炼,但是又要浅显易懂的Python教程。《Python学习手册》中文第四版虽然比较简单,但是措辞比较罗嗦,而且一个语法点往往散落在多个章节,不方便读者总结。 我在做笔记时,将一个知识点…

数字王国里的虚拟人――技术、商业与法律解读

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【海拥导航】🤟 找工作,来万码优才:👉 #小程序://万码优才/HDQZJEQiCJb9cFi💅 想寻找共同学习交流,摸鱼划水的小伙伴,请点击【全栈技…

用友crm客户关系管理config/fillbacksettingedit.php接口存在SQL注入漏洞

免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。 1. 用友crm客户关系管理简介 微信公众号搜索:南风漏…

LangChain4j系列—Java AI框架LangChain4j快速入门

一、概述 LangChain4j于2023年初在ChatGPT的炒作中开始开发。我们注意到,与众多的Python和JavaScript LLM库和框架相比,缺少Java对应项,我们必须修复它!尽管“LangChain”是以我们的名义命名的,但该项目融合了LangCha…

UEFI学习笔记(十):系统表与ACPI表的遍历

一、概述 在 UEFI 系统表中,有几个关键的表用于提供系统信息、服务和硬件抽象。这些表可以通过 EFI_SYSTEM_TABLE 访问,常见的 UEFI 系统表如下: 1、EFI_SYSTEM_TABLE (系统表) EFI_SYSTEM_TABLE 是一个指针,包含多个服务和系统…

电力电子技术03 AC-DC整流器(1)---AC-DC整流器概述

一、AC-DC整流器概述 1.AC-DC整流器简介 AC-DC整流器是将交流电(AC)转换为直流电(DC)的电力电子设备,它在许多电子设备中至关重要,尤其是需要稳定直流电源的应用场景,如电源适配器、电脑电源、…

VSCode中添加自定义代码片段

目录 VSCode中添加自定义代码片段 基本操作 辅助工具 VSCode中添加自定义代码片段 基本操作 打开Visual Studio Code设置,选择Snippets 在弹出的窗口中选择新建全局片段文件 如果只想为当前工作目录设置片段文件则选择第二个 输入新全局片段文件的名称 这个文件…

Redis学习(十二)连接数不足报错及分析修复:ERR max number of clients reached.

目录 一、问题介绍二、问题分析2.1 redis-cli 登录2.2 info clients 查看连接数情况2.3 client list 查看具体连接情况2.4 分析连接空闲时长2.5 client list 根据客户端IP统计连接数 三、问题结论和解决3.1 问题结论:3.2 解决方案①:优化程序3.3 解决方案…

execl表格批量换行问题

我拿到了一份execl表格。需要用代码去读每一行。 当我点击wps中的换行的时候。显示已经换行了。 但是我双击图表的时候,显示换行并没有生效。 还是在cell单元格里有很多行。 此时,ctrlf打开替换按钮。 选择替换的内容:altenter 按住alten…

轨迹预测升级:如何让自动驾驶汽车从意图与风险中真正读懂“人心”?

导读: 本篇文章提出了一种基于联合预测的轨迹预测模型,包括交互模块、意图模块和风险评估模块。实验结果表明,本文模型在正常场景中保持高准确性,并且展现了在事故场景中应对具有挑战性或者突发情况的潜力。©️【深蓝AI】编译…

重学SpringBoot3-集成Redis(九)之共享Session

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(九)之共享Session 1. 为什么需要 Session 共享2. Spring Session 和 Redis 的集成2.1. 引入依赖2.2. 配置 Redis 连接…

车辆重识别(2022ACM SIGGRAPH调色板:图像到图像的扩散模型)论文阅读2024/10/09

[2] Palette: Image-to-Image Diffusion Models ( ACM SIGGRAPH 2022) 作者:Chitwan Saharia、William Chan、Huiwen Chang 单位:Google Research, Brain Team 摘要: 本文基于条件扩散模型开发了一个统一的图像到图像翻译框架,并…

无人机避障——4D毫米波雷达点云滤波去噪(四)

噪声的来源: 对于4D毫米波雷达的前后两帧点云数据进行去噪,可以采用多种方法。首先,需要了解点云数据的噪声来源,可能是由于硬件限制、环境干扰或目标本身的反射特性等因素造成的。噪声点通常包括漂移点、孤立点、冗余点和混杂点…

【通过zip方式安装mysql服务】

通过zip方式安装mysql服务 Mysql安装包下载mysql安装及环境配置1.解压缩配置环境变量初始化mysql配置安装mysql服务启动MySQL服务连接mysql修改root用户密码 Mysql安装包下载 通过访问mysql官网下载:mysql下载地址 mysql安装及环境配置 1.解压缩 下载完成后&am…

YOLOv10改进策略【注意力机制篇】| GAM全局注意力机制: 保留信息以增强通道与空间的相互作用

一、本文介绍 本文记录的是基于GAM注意力模块的YOLOv10目标检测改进方法研究。GAM注意力模块通过3D排列和重新设计的子模块,能够在通道和空间方面保留信息,避免了先前方法中由于信息减少和维度分离而导致的全局空间-通道交互丢失的问题。本文利用GAM改进…

『网络游戏』角色创建界面逻辑【11】

创建代码:CreateWnd.cs 编写脚本:CreateWnd.cs 绑定脚本 修改脚本:LoginWnd.cs 绑定事件 修改脚本:Constans.cs 修改脚本:LoginSys.cs 修改脚本:LoginWnd.cs 拖拽框选 运行项目 - 点击开始进入创建角色界面…