{"id":37107271,"url":"https://github.com/iflytek/aiges-xtest","last_synced_at":"2026-01-14T12:53:53.178Z","repository":{"id":52788024,"uuid":"521102069","full_name":"iflytek/aiges-xtest","owner":"iflytek","description":"aiges RPC专用测试工具","archived":false,"fork":false,"pushed_at":"2025-11-14T03:31:56.000Z","size":14212,"stargazers_count":3,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-14T05:32:55.279Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iflytek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-04T02:51:51.000Z","updated_at":"2025-01-02T03:20:50.000Z","dependencies_parsed_at":"2024-04-08T08:43:04.152Z","dependency_job_id":"aab5d24a-d068-447c-bb52-67b354b100cc","html_url":"https://github.com/iflytek/aiges-xtest","commit_stats":{"total_commits":47,"total_committers":6,"mean_commits":7.833333333333333,"dds":0.5319148936170213,"last_synced_commit":"92fecf067366eef1d135a3100c27447837ed5367"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/iflytek/aiges-xtest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Faiges-xtest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Faiges-xtest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Faiges-xtest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Faiges-xtest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iflytek","download_url":"https://codeload.github.com/iflytek/aiges-xtest/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iflytek%2Faiges-xtest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28420814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-14T12:53:52.501Z","updated_at":"2026-01-14T12:53:53.169Z","avatar_url":"https://github.com/iflytek.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Xtest测试工具\n\u003e xtest 是一个基于Aiges平台的自动化测试工具，可支持单元测试、压力测试、功能测试等测试功能，并提供了基本的资源监控，可配合prometheus和grafana使用。\n\n## 一、使用说明\n1. 启动Aiservice，注意监听的端口是否有改变。\n2. 根据自己的AI模型修改xtest.toml文件，例如Aiservice端口、参数，测试轮数等配置，具体请参考说明六。\n3. 由于监听资源需要管理员权限，请保证本地已经安装```netstat```命令，然后执行： ```sudo ./xtest``` 或```sudo ./xtest -f *.toml ```命令启动， 否则资源文件将为空，但并不影响其他任务。\n4. GPU 监控为待开放功能，源码已实现，但要求用户拥有英伟达显卡监控（Nvidia-smi）\n\n\n## 二、需求分析\n\n### 2.1 功能需求\n\n- 模式-支持流式、非流式、异步回调三种模式\n- 非流式模式下\n    - [x] 读取文件输入\n    - [x] 配置中心手动输入数据\n- 流式模式下\n    - [x] 单一文件一次输入\n    - [x] 单一文件按照固定长度输入\n    - [x] 文本文件按行读取 √  优化代码\n    - [x] 多个文件，每个文件一帧输入\n        - [x] 文件有序\n        - [x] 文件无序\n\n### 2.2 性能需求\n\n- [x] 并发，显示当前路数\n- [x] 成功率，性能数据及性能分布，输出本地相关数据\n- [x] 内存、显存定时统计\n  - [x] CPU\n  - [x] 内存\n  - [x] GPU\n\n### 2.3 其他需求\n\n- 文档说明\n- demo样例\n\n\n## 三、配置说明\n\n### 3.1 样例配置\n\n```toml\n[xtest]\ntaddrs=\"AIservice@127.0.0.1:5090\"\ntrace-ip = \"172.16.51.13\"\n\n[svcMode]\nservice = \"AIservice\"           # 请求目标服务名称, eg:sms\nsvcId = \"s12345678\"             # 服务id\ntimeout = 1000                  # 服务超时时间, 对应服务端waitTime\nmultiThr = 100                  # 请求并发数\nloopCnt = 100000                # 请求总次数\nsessMode = 0                    # 0: 非会话模式, 1: 常规会话模式 2.文本按行会话模式 3.文件会话模式\nlinearMs = 5000                 # 并发压测线性增长区间,单位:ms\nperfOn=true                     # 是否开启性能测试\nperfLevel=0                     # 非会话模式默认0\n                                # 会话模式0: 从发第一帧到最后一帧的性能\n                                # 会话模式1:首结果(发送第一帧到最后一帧的性能)\n                                # 会话模式2:尾结果(发送最后一帧到收到最后一帧的性能)\ninputCmd = false                # 切换为命令行输入，仅在非会话模式生效\nprometheus_switch = true        # Prometheus开关， 开启后开启双写，同时写入prometheus与本地日志\nprometheus_port = 2117          # jbzhou5 Prometheus指标暴露端口\nplot = true                     # 绘制资源图， 默认开启\nplot_file = \"./log/line.png\"    # 绘制图形保存路径\nfile_sorted = 0                 # 传入文件是否排序， 0： 随机， 1： 升序， 2： 降序\nfile_name_seq = \"_\"             # 传入文件名分割方式 例如传入'_', 则1_2.txt -\u003e 1，2_2.txt -\u003e 2, 为空或者传入非法则不处理\n[header]\n\"appid\" = \"100IME\"\n\"uid\" = \"1234567890\"\n\n[parameter]\n\"key\" = 2\n\"x\" = 1\n\n[data]\npayload = \"dataKey2\"            # 输入数据流配置段,多个数据流以\";\"分割， 如果开启了inputCmd， 该值会被清空\nexpect = \"dataKey3\"             # 输出数据流配置段,多个数据流以\";\"分割\n\n[dataKey1]                      # 输入数据流dataKey1描述\ninputSrc = \"path\"               # 上行数据流数据源, 配置文件路径(配置为目录则循环读取目录中文件)\nsliceOn = false                 # 切片开关, false:关闭切换, true:开启切片\nsliceSize = 1280                # 上行数据切片大小,用于会话模式: byte\ninterval = 40                   # 上行数据发包间隔,用于会话模式: ms. 注：动态校准,每个包间隔非严格interval\nname = \"input1\"                 # 输入数据流key值\ntype = \"image\"                  # 数据类型，支持\"audio\",\"text\",\"image\",\"video\"\ndescribe = \"k1=v1;k2=v2\"        # 数据描述信息,多个描述信息以\";\"分割\n                                # 图像支持如下属性：\"encoding\", 如\"encoding=jpg\"\n[dataKey2]\ninputSrc = \"./testdata/text2\"   # 上行数据流数据源, 配置文件路径(配置为目录则循环读取目录中文件)\nsliceOn = false                 # 切片开关, false:关闭切换, true:开启切片\nsliceSize = 1280                # 上行数据切片大小,用于会话模式: byte\ninterval = 40                   # 上行数据发包间隔,用于会话模式: ms. 注：动态校准,每个包间隔非严格interval\nname = \"input2\"                 # 输入数据流key值\ntype = \"text\"                  \t# 数据类型，支持\"audio\",\"text\",\"image\",\"video\"\ndescribe = \"encoding=utf8\"      # 数据描述信息,多个描述信息以\";\"分割\n                                # 图像支持如下属性：\"encoding\", 如\"encoding=jpg\"\n[dataKey3]\nname = \"result\"                 # 输入数据流key值\ntype = \"text\"                   # 输出数据类型，支持\"audio\",\"text\",\"image\",\"video\"\ndescribe = \"k1=v1;k2=v2\"        # 数据描述信息,多个描述信息以\";\"分割\n                                # 文本支持如下属性：\"encoding\",\"compress\", 如\"encoding=utf8;compress=gzip\"\n\n\n[downstream]                    # 下行数据流存储输出\noutput = 0                      # 输出方式： 0:输出至公共文件outputDst 1:以独立文件形式输出至目录outputDst(文件名:sid+**) 2：输出至终端\noutputDst = \"./log/result\"      # 响应数据输出目标, 若output=0则配置目录, output=1则配置文件\n\n\n[log]\nfile = \"./log/xtest.log\"        # 日志文件名\nlevel = \"debug\"                 # 日志打印等级\nsize = 100                      # 日志文件大小\ncount = 20                      # 日志备份数量\nasync = 0                       # 异步开关\ndie = 30\n\n[trace]\nable = 0\n```\n## 四、字段说明\n\u003e **xtest.toml 中大部分字段一般保持不变，下面仅对常用字段进行说明解释。**\n- ```[xtest]```\n  - ```taddrs=\"AIservice@127.0.0.1:5090\"```： 与Aiservice的通信地址，与AIservice的启动端口对应，其中端口会被解析用于获取Aiservice的进程，监听其使用资源信息。\n  - ``` trace-ip = \"172.16.51.13```\n- ```[svcMode]```\n  - ```service = \"AIservice\"``` ： 请求目标服务名称, eg:sms\n  - ```svcId = \"s12345678\"```   ：服务id\n  - ```timeout = 1000``` ：服务超时时间, 对应服务端waitTime\n  - ```multiThr = 100``` ：请求并发数，即同时开启多个协程发送请求测试\n  - ```loopCnt = 100000``` ： multiThr个协程发送的请求总次数\n  - ```sessMode = 0``` ： 0: 非会话模式, 1: 常规会话模式 2.文本按行会话模式 3.文件会话模式\n  - ```linearMs = 5000``` ：并发压测线性增长区间,单位:ms\n  - ```perfOn=true``` ： 是否开启性能测试，即是否在log文件夹底下记录perf.txt和PerfRecord.csv，用于记录成功率、失败率、发送延迟等性能指标。\n  - ```perfLevel=0 ```：与sessMode字段对应，非会话模式默认0，会话模式0: 从发第一帧到最后一帧的性能，会话模式1:首结果(发送第一帧到最后一帧的性能)，会话模式2:尾结果(发送最后一帧到收到最后一帧的性能)\n  - ```inputCmd = false ```：切换为命令行输入，仅在非会话模式生效，配置该字段时，所配置的[data] 字段将失效，仅读取用户命令行输入数据\n  - ```prometheus_switch = true``` ：Prometheus开关，开启后会开放一个Prometheus监控端口，可使用grafana进行数据的展示。关闭/打开都会在Log目录生成一个Resource.csv 资源监听文件。\n  - ```prometheus_port = 2117```：Prometheus指标暴露端口\n  - ```plot = true``` ：绘制资源图，默认开启，将绘制Aiservice使用的资源变化折线图\n  - ```plot_file = \"./log/line.png\"``` ：绘制图形保存路径\n  - ```file_sorted = 0``` ：[data] 传入文件是否按名称排序， 0： 随机， 1： 升序， 2： 降序\n  - ```file_name_seq = \"_\"``` ： 传入文件名分割方式 例如传入'_', 则1_2.txt -\u003e 1，2_2.txt -\u003e 2, 为空或者传入非法（即不能作为文件名的字符）则不处理， 注意此处分割为仅保留前半部分，若文件名为1_2_3.txt， 则得到的分割文件名为1。\n- \n- ```[parameter]```：使用的AI模型需要传入的字段，根据自己需要填写\n  - ```\"key\" = 2```\n  - ```\"x\" = 1```\n\n- ```[data]```\n  - ```payload = \"dataKey2\"``` ：输入数据流配置段,多个数据流以\";\"分割， jbzhou5 如果开启了inputCmd， 该值会被清空\n  - ```expect = \"dataKey3\"```：输出数据流配置段,多个数据流以\";\"分割\n\n- ```[dataKey1] ``` ：名称可自定义，主要用于在[data] 字段的payload属性中方便标记加载数据，输入数据流dataKey1描述\n  - ```inputSrc = \"path\" ```：上行数据流数据源, 配置文件路径(配置为目录则循环读取目录中文件)\n  - ```sliceOn = false```：切片开关, false:关闭切换, true:开启切片\n  - ```sliceSize = 1280```：上行数据切片大小,用于会话模式: byte\n  - ```interval = 40```： 上行数据发包间隔,用于会话模式: ms. 注：动态校准,每个包间隔非严格interval\n  - ```name = \"input1\"```： 输入数据流key值\n  - ```type = \"image\"```： 数据类型，支持\"audio\",\"text\",\"image\",\"video\"\n  - ```describe = \"k1=v1;k2=v2\"```： 数据描述信息,多个描述信息以\";\"分割，图像支持如下属性：\"encoding\", 如\"encoding=jpg\"\n\n- ```[dataKey2]```\n  - ```inputSrc = \"./testdata/text2\"```：上行数据流数据源, 配置文件路径(配置为目录则循环读取目录中文件)\n  - ```sliceOn = false```： 切片开关, false:关闭切换, true:开启切片\n  - ```sliceSize = 1280```：上行数据切片大小,用于会话模式: byte\n  - ```interval = 40```： 上行数据发包间隔,用于会话模式: ms. 注：动态校准,每个包间隔非严格interval\n  - ```name = \"input2\"```： 输入数据流key值\n  - ```type = \"text\"``` ： 数据类型，支持\"audio\",\"text\",\"image\",\"video\"\n  - ```describe = \"encoding=utf8\"``` ： 数据描述信息,多个描述信息以\";\"分割图像支持如下属性：\"encoding\", 如\"encoding=jpg\"\n\n- ``` [dataKey3]```\n  - ```name = \"result\"```： 输入数据流key值\n  - ```type = \"text\"```：输出数据类型，支持\"audio\",\"text\",\"image\",\"video\"\n  - ```describe = \"k1=v1;k2=v2\"```： 数据描述信息,多个描述信息以\";\"分割，文本支持如下属性：\"encoding\",\"compress\", 如\"encoding=utf8;compress=gzip\"\n\n\n- ```[downstream] ``` ：下行数据流存储输出\n  - ```output = 0 ```： 输出方式： 0:输出至公共文件outputDst 1:以独立文件形式输出至目录outputDst(文件名:sid+**) 2：输出至终端\n  - ```outputDst = \"./log/result\"```：响应数据输出目标, 若output=0则配置目录, output=1则配置文件\n\n\n- ```[log]```\n  - ```file = \"./log/xtest.log\"```：日志文件名\n  - ```level = \"debug\" ```：日志打印等级\n  - ```size = 100 ```：日志文件大小，单个超过size，将会写入新文件。\n  - ```count = 20``` ： 日志备份数量\n  - ```async = 0```： 异步开关\n  - ```die = 30```\n\n- ```[trace]```\n  - ```able = 0```\n\n## 五、[代码说明](https://github.com/tupig-7/aiges-xtest/tree/main/doc)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiflytek%2Faiges-xtest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiflytek%2Faiges-xtest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiflytek%2Faiges-xtest/lists"}