<?xml version="1.0" encoding="UTF-8"?>
<robot generator="Robot 7.3.2 (Python 3.9.6 on darwin)" generated="2026-04-16T23:29:52.024888" rpa="false" schemaversion="5">
<suite id="s1" name="Profit Analysis" source="/Users/lihu/.jenkins/workspace/bitradex-api-automation/tests/invite/profit_analysis.robot">
<kw name="测试环境初始化" owner="common" type="SETUP">
<kw name="Get Variable Value" owner="BuiltIn">
<var>${cli_env}</var>
<arg>\${TEST_ENV}</arg>
<arg>${env}</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-16T23:29:52.118077" elapsed="0.000097"/>
</kw>
<if>
<branch type="IF" condition="'${cli_env}' == '${env}'">
<kw name="Log" owner="BuiltIn">
<arg>未检测到命令行TEST_ENV变量，使用默认值: ${env}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T23:29:52.118302" elapsed="0.000093"/>
</kw>
<status status="PASS" start="2026-04-16T23:29:52.118220" elapsed="0.000190"/>
</branch>
<branch type="ELSE">
<kw name="Log" owner="BuiltIn">
<arg>检测到命令行TEST_ENV变量: ${cli_env}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.118459" elapsed="0.000007"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.118420" elapsed="0.000060"/>
</branch>
<status status="PASS" start="2026-04-16T23:29:52.118210" elapsed="0.000278"/>
</if>
<kw name="设置测试环境" owner="common">
<kw name="Log" owner="BuiltIn">
<arg>设置环境: ${env}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T23:29:52.118697" elapsed="0.000059"/>
</kw>
<if>
<branch type="IF" condition="'${env}' == 'test'">
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${BASE_URL}</arg>
<arg>https://api.example.com</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.118842" elapsed="0.000007"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${ENV_NAME}</arg>
<arg>测试环境</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.118888" elapsed="0.000007"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${TIMEOUT}</arg>
<arg>30</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.118931" elapsed="0.000007"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${HOST_NAME}</arg>
<arg>api.example.com</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.118975" elapsed="0.000006"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${APP_PREFIX}</arg>
<arg>Test</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119017" elapsed="0.000006"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.118781" elapsed="0.000255"/>
</branch>
<branch type="ELSE IF" condition="'${env}' == 'prod'">
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${BASE_URL}</arg>
<arg>https://app.bitradex.mobi</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119102" elapsed="0.000007"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${ENV_NAME}</arg>
<arg>生产环境</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119147" elapsed="0.000006"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${TIMEOUT}</arg>
<arg>30</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119191" elapsed="0.000006"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${HOST_NAME}</arg>
<arg>app.bitradex.mobi</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119233" elapsed="0.000006"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${APP_PREFIX}</arg>
<arg>Prod</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119278" elapsed="0.000007"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${DEFAULT_APP_VERSION}</arg>
<arg>1.1.9</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119324" elapsed="0.000006"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${DEFAULT_BUILD_CODE}</arg>
<arg>7032</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119367" elapsed="0.000006"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${DEFAULT_APP_CHANNEL}</arg>
<arg>ios-prod</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.119408" elapsed="0.000007"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.119044" elapsed="0.000382"/>
</branch>
<branch type="ELSE">
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${BASE_URL}</arg>
<arg>https://app.bitradex-test.com</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="PASS" start="2026-04-16T23:29:52.119468" elapsed="0.000292"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${ENV_NAME}</arg>
<arg>BitRadeX测试环境</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="PASS" start="2026-04-16T23:29:52.119809" elapsed="0.000287"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${TIMEOUT}</arg>
<arg>30</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="PASS" start="2026-04-16T23:29:52.120154" elapsed="0.000303"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${HOST_NAME}</arg>
<arg>app.bitradex-test.com</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="PASS" start="2026-04-16T23:29:52.120499" elapsed="0.000272"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${APP_PREFIX}</arg>
<arg>Test</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="PASS" start="2026-04-16T23:29:52.120814" elapsed="0.000321"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${DEFAULT_APP_VERSION}</arg>
<arg>1.2.0</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="PASS" start="2026-04-16T23:29:52.121179" elapsed="0.000292"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${DEFAULT_BUILD_CODE}</arg>
<arg>7034</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="PASS" start="2026-04-16T23:29:52.121515" elapsed="0.000270"/>
</kw>
<kw name="Set Global Variable" owner="BuiltIn">
<arg>${DEFAULT_APP_CHANNEL}</arg>
<arg>ios-test-flight</arg>
<doc>Makes a variable available globally in all tests and suites.</doc>
<status status="PASS" start="2026-04-16T23:29:52.121827" elapsed="0.000275"/>
</kw>
<status status="PASS" start="2026-04-16T23:29:52.119434" elapsed="0.002682"/>
</branch>
<status status="PASS" start="2026-04-16T23:29:52.118775" elapsed="0.003349"/>
</if>
<kw name="Log" owner="BuiltIn">
<arg>已设置测试环境: ${ENV_NAME} (${BASE_URL})</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T23:29:52.122160" elapsed="0.000071"/>
</kw>
<kw name="Create Session" owner="RequestsLibrary">
<arg>api_session</arg>
<arg>${BASE_URL}</arg>
<arg>timeout=${TIMEOUT}</arg>
<doc>Create Session: create a HTTP session to a server</doc>
<status status="PASS" start="2026-04-16T23:29:52.122271" elapsed="0.000154"/>
</kw>
<arg>${cli_env}</arg>
<doc>设置测试环境，支持多环境配置</doc>
<status status="PASS" start="2026-04-16T23:29:52.118595" elapsed="0.003857"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>测试环境初始化完成</arg>
<doc>Logs the given message with the given level.</doc>
<status status="PASS" start="2026-04-16T23:29:52.122534" elapsed="0.000044"/>
</kw>
<doc>初始化测试环境，设置默认配置</doc>
<status status="PASS" start="2026-04-16T23:29:52.117765" elapsed="0.004833"/>
</kw>
<test id="s1-t1" name="获取用户收益信息" line="13">
<kw name="Set Log Level" owner="BuiltIn">
<arg>WARN</arg>
<doc>Sets the log threshold to the specified level.</doc>
<status status="PASS" start="2026-04-16T23:29:52.123078" elapsed="0.000108"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<var>${access_token}</var>
<arg>\${ACCESS_TOKEN}</arg>
<arg>${EMPTY}</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-16T23:29:52.123265" elapsed="0.000097"/>
</kw>
<kw name="Get Variable Value" owner="BuiltIn">
<var>${refresh_token}</var>
<arg>\${REFRESH_TOKEN}</arg>
<arg>${EMPTY}</arg>
<doc>Returns variable value or ``default`` if the variable does not exist.</doc>
<status status="PASS" start="2026-04-16T23:29:52.123428" elapsed="0.000087"/>
</kw>
<if>
<branch type="IF" condition="'${access_token}' == '${EMPTY}' or '${refresh_token}' == '${EMPTY}'">
<kw name="Set Variable" owner="BuiltIn">
<var>${token_file}</var>
<arg>${TOKEN_FILE}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T23:29:52.123972" elapsed="0.000077"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<kw name="File Should Exist" owner="OperatingSystem">
<arg>${token_file}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="PASS" start="2026-04-16T23:29:52.124160" elapsed="0.000090"/>
</kw>
<var>${token_file_exists}</var>
<arg>File Should Exist</arg>
<arg>${token_file}</arg>
<doc>Runs the given keyword with given arguments and returns the status as a Boolean value.</doc>
<status status="PASS" start="2026-04-16T23:29:52.124101" elapsed="0.000216"/>
</kw>
<if>
<branch type="IF" condition="not ${token_file_exists}">
<kw name="Set Variable" owner="BuiltIn">
<var>${token_file}</var>
<arg>%{HOME}/.bitradex_tokens.json</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.124421" elapsed="0.000009"/>
</kw>
<kw name="File Should Exist" owner="OperatingSystem">
<arg>${token_file}</arg>
<doc>Fails unless the given ``path`` points to an existing file.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.124472" elapsed="0.000008"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.124350" elapsed="0.000143"/>
</branch>
<status status="PASS" start="2026-04-16T23:29:52.124342" elapsed="0.000161"/>
</if>
<kw name="Get File" owner="OperatingSystem">
<var>${token_text}</var>
<arg>${token_file}</arg>
<doc>Returns the contents of a specified file.</doc>
<status status="PASS" start="2026-04-16T23:29:52.124542" elapsed="0.000278"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<var>${token_json}</var>
<arg>json.loads($token_text)</arg>
<arg>json</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="PASS" start="2026-04-16T23:29:52.124869" elapsed="0.000135"/>
</kw>
<if>
<branch type="IF" condition="'${access_token}' == '${EMPTY}'">
<kw name="Get From Dictionary" owner="Collections">
<var>${access_token}</var>
<arg>${token_json}</arg>
<arg>accessToken</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T23:29:52.125296" elapsed="0.000073"/>
</kw>
<status status="PASS" start="2026-04-16T23:29:52.125036" elapsed="0.000349"/>
</branch>
<status status="PASS" start="2026-04-16T23:29:52.125029" elapsed="0.000365"/>
</if>
<if>
<branch type="IF" condition="'${refresh_token}' == '${EMPTY}'">
<kw name="Get From Dictionary" owner="Collections">
<var>${refresh_token}</var>
<arg>${token_json}</arg>
<arg>refreshToken</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="PASS" start="2026-04-16T23:29:52.125611" elapsed="0.000074"/>
</kw>
<status status="PASS" start="2026-04-16T23:29:52.125413" elapsed="0.000292"/>
</branch>
<status status="PASS" start="2026-04-16T23:29:52.125407" elapsed="0.000308"/>
</if>
<status status="PASS" start="2026-04-16T23:29:52.123566" elapsed="0.002158"/>
</branch>
<status status="PASS" start="2026-04-16T23:29:52.123554" elapsed="0.002179"/>
</if>
<kw name="Should Not Be Empty" owner="BuiltIn">
<arg>${access_token}</arg>
<doc>Verifies that the given item is not empty.</doc>
<status status="PASS" start="2026-04-16T23:29:52.125819" elapsed="0.000132"/>
</kw>
<kw name="Should Not Be Empty" owner="BuiltIn">
<arg>${refresh_token}</arg>
<doc>Verifies that the given item is not empty.</doc>
<status status="PASS" start="2026-04-16T23:29:52.126162" elapsed="0.000148"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn">
<arg>'${access_token}' == 'REPLACE_ME'</arg>
<arg>Fail</arg>
<arg>accessToken 未配置，请修改 ${TOKEN_FILE} 中的 accessToken</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-16T23:29:52.126470" elapsed="0.000098"/>
</kw>
<kw name="Run Keyword If" owner="BuiltIn">
<arg>'${refresh_token}' == 'REPLACE_ME'</arg>
<arg>Fail</arg>
<arg>refreshToken 未配置，请修改 ${TOKEN_FILE} 中的 refreshToken</arg>
<doc>Runs the given keyword with the given arguments, if ``condition`` is true.</doc>
<status status="PASS" start="2026-04-16T23:29:52.126641" elapsed="0.000066"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${user_id}</var>
<arg>${USER_ID}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T23:29:52.126770" elapsed="0.000079"/>
</kw>
<if>
<branch type="IF" condition="'${user_id}' == '${EMPTY}'">
<kw name="Split String" owner="String">
<var>${parts}</var>
<arg>${access_token}</arg>
<arg>.</arg>
<doc>Splits the ``string`` using ``separator`` as a delimiter string.</doc>
<status status="PASS" start="2026-04-16T23:29:52.127409" elapsed="0.000093"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${payload_b64}</var>
<arg>${parts[1]}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="PASS" start="2026-04-16T23:29:52.127553" elapsed="0.000252"/>
</kw>
<kw name="Evaluate" owner="BuiltIn">
<msg time="2026-04-16T23:29:52.128043" level="FAIL">Evaluating expression "json.loads(base64.urlsafe_b64decode(($payload_b64 + '=' * (-len($payload_b64) % 4)).encode('utf-8')).decode('utf-8'))" failed: ValueError: dictionary update sequence element #0 has length 1; 2 is required</msg>
<var>${payload}</var>
<arg>json.loads(base64.urlsafe_b64decode(($payload_b64 + '=' * (-len($payload_b64) % 4)).encode('utf-8')).decode('utf-8'))</arg>
<arg>json</arg>
<arg>base64</arg>
<doc>Evaluates the given expression in Python and returns the result.</doc>
<status status="FAIL" start="2026-04-16T23:29:52.127854" elapsed="0.000233">Evaluating expression "json.loads(base64.urlsafe_b64decode(($payload_b64 + '=' * (-len($payload_b64) % 4)).encode('utf-8')).decode('utf-8'))" failed: ValueError: dictionary update sequence element #0 has length 1; 2 is required</status>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${has_user_id}</var>
<arg>Dictionary Should Contain Key</arg>
<arg>${payload}</arg>
<arg>userId</arg>
<doc>Runs the given keyword with given arguments and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.128148" elapsed="0.000009"/>
</kw>
<if>
<branch type="IF" condition="${has_user_id}">
<kw name="Set Variable" owner="BuiltIn">
<var>${user_id}</var>
<arg>${payload['userId']}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.128314" elapsed="0.000014"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.128244" elapsed="0.000145"/>
</branch>
<branch type="ELSE">
<kw name="Set Variable" owner="BuiltIn">
<var>${user_id}</var>
<arg>${payload['accountId']}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.128449" elapsed="0.000008"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.128403" elapsed="0.000069"/>
</branch>
<status status="NOT RUN" start="2026-04-16T23:29:52.128229" elapsed="0.000251"/>
</if>
<status status="FAIL" start="2026-04-16T23:29:52.126952" elapsed="0.001576">Evaluating expression "json.loads(base64.urlsafe_b64decode(($payload_b64 + '=' * (-len($payload_b64) % 4)).encode('utf-8')).decode('utf-8'))" failed: ValueError: dictionary update sequence element #0 has length 1; 2 is required</status>
</branch>
<status status="FAIL" start="2026-04-16T23:29:52.126939" elapsed="0.001669">Evaluating expression "json.loads(base64.urlsafe_b64decode(($payload_b64 + '=' * (-len($payload_b64) % 4)).encode('utf-8')).decode('utf-8'))" failed: ValueError: dictionary update sequence element #0 has length 1; 2 is required</status>
</if>
<kw name="Create Dictionary" owner="BuiltIn">
<var>&amp;{params}</var>
<arg>user-id=${user_id}</arg>
<doc>Creates and returns a dictionary based on the given ``items``.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.128851" elapsed="0.000017"/>
</kw>
<kw name="获取统一请求头" owner="common">
<var>${headers}</var>
<arg>app_version=1.2.7</arg>
<arg>build_code=7051</arg>
<arg>token=${access_token}</arg>
<doc>获取统一的应用请求头配置</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129037" elapsed="0.000017"/>
</kw>
<kw name="Set To Dictionary" owner="Collections">
<arg>${headers}</arg>
<arg>uid=${user_id}</arg>
<doc>Adds the given ``key_value_pairs`` and/or ``items`` to the ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129122" elapsed="0.000009"/>
</kw>
<kw name="GET On Session" owner="RequestsLibrary">
<var>${response}</var>
<arg>api_session</arg>
<arg>/v1/invite/public/user-team/profit/user</arg>
<arg>params=&amp;{params}</arg>
<arg>headers=${headers}</arg>
<arg>expected_status=any</arg>
<doc>Sends a GET request on a previously created HTTP Session.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129187" elapsed="0.000009"/>
</kw>
<kw name="Run Keyword And Return Status" owner="BuiltIn">
<var>${has_code}</var>
<arg>Dictionary Should Contain Key</arg>
<arg>${response.json()}</arg>
<arg>code</arg>
<doc>Runs the given keyword with given arguments and returns the status as a Boolean value.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129297" elapsed="0.000010"/>
</kw>
<kw name="Set Variable" owner="BuiltIn">
<var>${biz_code}</var>
<arg>${EMPTY}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129368" elapsed="0.000008"/>
</kw>
<if>
<branch type="IF" condition="${has_code}">
<kw name="Set Variable" owner="BuiltIn">
<var>${biz_code}</var>
<arg>${response.json()['code']}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129456" elapsed="0.000008"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.129415" elapsed="0.000063"/>
</branch>
<status status="NOT RUN" start="2026-04-16T23:29:52.129407" elapsed="0.000080"/>
</if>
<if>
<branch type="IF" condition="${response.status_code} == 401 or '${biz_code}' == '401'">
<kw name="Run Keyword And Ignore Error" owner="BuiltIn">
<var>${refresh_status}</var>
<var>${refresh_result}</var>
<arg>刷新Token并重试</arg>
<arg>/v1/invite/public/user-team/profit/user</arg>
<arg>${refresh_token}</arg>
<arg>params=${params}</arg>
<doc>Runs the given keyword with the given arguments and ignores possible error.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129574" elapsed="0.000007"/>
</kw>
<if>
<branch type="IF" condition="'${refresh_status}' == 'PASS'">
<kw name="Set Variable" owner="BuiltIn">
<var>${response}</var>
<arg>${refresh_result}</arg>
<doc>Returns the given values which can then be assigned to a variables.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129651" elapsed="0.000008"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.129612" elapsed="0.000060"/>
</branch>
<branch type="ELSE">
<kw name="Skip" owner="BuiltIn">
<arg>Token已失效且refreshToken不可用: ${refresh_result}</arg>
<doc>Skips the rest of the current test.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129718" elapsed="0.000007"/>
</kw>
<status status="NOT RUN" start="2026-04-16T23:29:52.129681" elapsed="0.000057"/>
</branch>
<status status="NOT RUN" start="2026-04-16T23:29:52.129606" elapsed="0.000140"/>
</if>
<status status="NOT RUN" start="2026-04-16T23:29:52.129528" elapsed="0.000227"/>
</branch>
<status status="NOT RUN" start="2026-04-16T23:29:52.129522" elapsed="0.000241"/>
</if>
<kw name="验证接口响应成功" owner="common">
<arg>${response}</arg>
<doc>验证接口响应状态码为200</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129833" elapsed="0.000012"/>
</kw>
<kw name="验证响应字段值" owner="common">
<arg>${response}</arg>
<arg>code</arg>
<arg>${0}</arg>
<doc>验证响应JSON字段的值</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129905" elapsed="0.000010"/>
</kw>
<kw name="验证响应包含字段" owner="common">
<arg>${response}</arg>
<arg>data</arg>
<doc>验证响应JSON包含指定字段</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.129981" elapsed="0.000009"/>
</kw>
<kw name="Get From Dictionary" owner="Collections">
<var>${data}</var>
<arg>${response.json()}</arg>
<arg>data</arg>
<doc>Returns a value from the given ``dictionary`` based on the given ``key``.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.130044" elapsed="0.000009"/>
</kw>
<kw name="Dictionary Should Contain Key" owner="Collections">
<arg>${data}</arg>
<arg>uid</arg>
<doc>Fails if ``key`` is not found from ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.130105" elapsed="0.000008"/>
</kw>
<kw name="Dictionary Should Contain Key" owner="Collections">
<arg>${data}</arg>
<arg>level</arg>
<doc>Fails if ``key`` is not found from ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.130162" elapsed="0.000008"/>
</kw>
<kw name="Dictionary Should Contain Key" owner="Collections">
<arg>${data}</arg>
<arg>totalEarnings</arg>
<doc>Fails if ``key`` is not found from ``dictionary``.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.130217" elapsed="0.000007"/>
</kw>
<kw name="Log" owner="BuiltIn">
<arg>用户 ${user_id} 的总收益为: ${data['totalEarnings']}</arg>
<doc>Logs the given message with the given level.</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.130285" elapsed="0.000007"/>
</kw>
<kw name="完整输出JSON响应" owner="common">
<arg>${response}</arg>
<doc>输出纯净JSON数据</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.130354" elapsed="0.000010"/>
</kw>
<kw name="本次测试简报" owner="common">
<arg>获取用户收益信息</arg>
<arg>/v1/invite/public/user-team/profit/user</arg>
<arg>${response}</arg>
<doc>根据测试执行情况自动生成详细的测试过程总结</doc>
<status status="NOT RUN" start="2026-04-16T23:29:52.130437" elapsed="0.000010"/>
</kw>
<doc>验证获取用户收益信息接口功能</doc>
<tag>invite</tag>
<tag>profit</tag>
<status status="FAIL" start="2026-04-16T23:29:52.122624" elapsed="0.007905">Evaluating expression "json.loads(base64.urlsafe_b64decode(($payload_b64 + '=' * (-len($payload_b64) % 4)).encode('utf-8')).decode('utf-8'))" failed: ValueError: dictionary update sequence element #0 has length 1; 2 is required</status>
</test>
<doc>用户及团队收益分析-获取用户收益信息</doc>
<status status="FAIL" start="2026-04-16T23:29:52.025838" elapsed="0.104888"/>
</suite>
<statistics>
<total>
<stat pass="0" fail="1" skip="0">All Tests</stat>
</total>
<tag>
<stat pass="0" fail="1" skip="0">invite</stat>
<stat pass="0" fail="1" skip="0">profit</stat>
</tag>
<suite>
<stat name="Profit Analysis" id="s1" pass="0" fail="1" skip="0">Profit Analysis</stat>
</suite>
</statistics>
<errors>
</errors>
</robot>
