还未发布过话题
  • 你的拒绝理由很有道理。自动化测试确实可以发现接口错误的情况,但是如果在接口发生变化后自动化测试用例没有及时更新,那么自动化测试就很可能会误报。这可能会浪费团队的时间和精力,导致团队不信任自动化测试。

    我认同你的建议,不要在每次提交代码后都运行自动化测试,而是在适当的时间运行自动化测试。例如,在新版本第一轮测试后,测试环境稳定且测试用例已经基本覆盖了新的功能,这时候可以更新自动化测试用例并运行一次自动化测试。之后,每次开发修复 BUG、代码发生变化,可以在相应的时间点运行自动化测试验证稳定性。这些时间点可能包括:

    版本发布前:在发布正式版本前,运行自动化测试以确保产品的质量。

    合并请求前:在合并请求前,运行自动化测试以验证代码变更的稳定性。

    每日构建:每日构建时,运行自动化测试以发现新增的问题。

    特定事件后:例如发生故障或漏洞时,运行自动化测试以验证修复是否成功,并避免引入其他问题。

    需要根据你们的具体情况,评估合适的时间点来运行自动化测试。这样能够提高自动化测试的有效性,减少测试和开发的工作负担,也能更好地支持团队的持续集成和交付。

  • 以下是一些关于如何使用 Thrift 的简单步骤:

    安装 Thrift
    可以使用 pip 安装 Thrift:

    pip install thrift
    编写 thrift 文件
    在 thrift 文件中定义服务接口和数据结构,例如:

    namespace py my.test

    typedef i32 UserId

    struct User {
    1: UserId id,
    2: string name,
    3: string email
    }

    service UserService {
    User getUser(1: UserId id),
    void addUser(1: User user)
    }
    生成 Python 代码
    使用 Thrift 的命令行工具生成 Python 客户端代码:

    thrift -r --gen py my_test.thrift
    这将生成一个名为 gen-py 的目录,其中包含了自动生成的 Python 代码文件。

    编写测试脚本
    在 Python 中,导入自动生成的代码,并创建 Thrift 客户端:

    import sys
    sys.path.append('gen-py')

    from my.test import UserService
    from my.test.ttypes import User

    from thrift import Thrift
    from thrift.transport import TSocket
    from thrift.transport import TTransport
    from thrift.protocol import TBinaryProtocol

    连接 Thrift 服务

    transport = TSocket.TSocket('localhost', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = UserService.Client(protocol)

    打开连接

    transport.open()

    调用服务接口

    user = client.getUser(123)

    关闭连接

    transport.close()
    这是一个简单的示例,其中通过 Thrift 客户端调用了 getUser 接口。在实际使用中,还需要根据需要编写更详细的测试代码。

    希望这些信息能对你有所帮助。

  • 你可以尝试使用 cocos 自带的测试框架 CocosUnitTest,它可以用于替代 Airtest 等自动化测试工具。另外,你也可以考虑使用 Cocos Creator 以及 Creator 自带的 UI 工具,它们可以更好地集成 UI 自动化测试。

    如果使用 CocosUnitTest,你需要编写测试脚本代码,记录当前场景节点,并且可以对该场景进行触发动作及检测,最后输出结果。此框架需要开发者对游戏开发有一定了解和编写测试脚本的经验。

    如果使用 Cocos Creator,你需要在游戏场景中设置每个元素的节点名称、结构和布局。然后使用 Creator 提供的组件、接口等来实现 UI 测试,例如使用 cc.Button 组件点击按钮或者使用 cc.Label 检测文本显示内容等。

    总之,通过 CocosUnitTest 和 Cocos Creator 的方法都可以完美实现 cocos 游戏的 UI 自动化,选择适合项目的方式来进行 UI 自动化测试吧。

  • 请教数据库并发测试 at 2023年03月23日

    使用 JMeter 模拟多个 Agent 的并发请求,可以通过以下步骤进行:

    创建测试计划:在 JMeter 中创建一个新的测试计划,并添加一个线程组,设置线程组的线程数和持续时间,以模拟多个 Agent 的并发操作场景。

    添加 JDBC 配置:在测试计划中添加一个 JDBC 配置元件,设置数据库的连接信息,例如数据库驱动程序、连接 URL、用户名和密码等。

    添加 JDBC 请求:在线程组下添加一个 JDBC 请求元件,设置要执行的 SQL 语句,例如插入、删除、查询、更新等操作。

    添加断言:添加断言来验证数据库的查询结果是否正确,例如比较查询结果中的某个字段值是否符合预期,以此来确保数据库操作的正确性。

    添加监听器:添加监听器来收集测试结果和性能指标,例如聚合报告、查看结果树、运行时图表等,以便分析测试结果和性能瓶颈。

    执行测试:运行测试计划,观察测试结果并根据需要调整测试参数和配置,例如线程数、持续时间、数据库连接池大小,以优化测试效果和性能。

    通过使用 JMeter,可以方便地模拟多个 Agent 的并发请求,并对数据库进行压力测试和性能测试,从而评估数据库在高并发情况下的性能和稳定性,并发现潜在的性能瓶颈和问题。

  • 这是一个非常好的问题,实际上在 API 接口封装中,这个问题是一个非常重要的问题。想法 1 和想法 2 都有其优点和缺点,下面我会逐一进行分析和讲解。

    想法 1: 不同 menu 下面三个文件 api.py, button.py, check.py

    这种方式的优点在于:

    文件结构清晰,方便查找和维护。
    封装方式简单,易于实现。
    缺点在于:

    在每个 menu 下,都需要编写 3 个文件,这增加了编写和维护的工作量。
    当 menu 数量增加时,文件结构会变得相对较深,查找和维护会变得更加复杂。
    想法 2: api 下面不同 menu.py,button 下面不同 menu.py,check 下面不同 menu.py

    这种方式的优点在于:

    以 menu 为单元进行封装,每个 menu 的 API、button 和 check 都放在同一个文件中,方便维护。
    缺点在于:

    在每个 menu 中,需要编写三个类,分别用于封装 API、button 和 check,这增加了编写和维护的工作量。
    当 menu 数量增加时,需要创建更多的类,这将增加代码量和维护成本。
    基于以上分析,我个人更倾向于采用想法 1,因为想法 1 的结构清晰、易于查找和维护,并且还可以通过采用适当的文件夹结构来解决文件结构变得过于深的问题,例如:

    Copy code
    project
    ├── menu1
    │ ├── api.py
    │ ├── button.py
    │ └── check.py
    ├── menu2
    │ ├── api.py
    │ ├── button.py
    │ └── check.py
    ├── menu3
    │ ├── api.py
    │ ├── button.py
    │ └── check.py
    └── utils
    ├── common.py
    ├── http.py
    └── ...
    这种结构可以轻松地扩展到多个 menu,并且由于 utils 文件夹的存在,可以方便地共享公共代码,也可以将任何需要单独维护的代码放在独立的文件夹中。

    最后,需要根据实际需求和项目情况来选择适合自己的封装方式,权衡利弊,并且采用适当的结构来组织代码。

  • 仅楼主可见
  • 请教数据库并发测试 at 2023年03月22日
    仅楼主可见
  • 仅楼主可见
  • 仅楼主可见