文章目录

  • 简介
  • 安装
  • 基础语法
    • 测试数据(Test Data)
      • 解析规则
    • 测试用例
      • 参数
      • 失败处理
      • 名称和文档
      • 标签
      • Setup&Teardown
      • 测试模板
      • 类型
    • 测试套件
      • 自定义
    • 测试库
      • 标准库
    • 变量
      • 标量
      • 列表
      • 字典
      • 环境变量
      • 创建
      • 关键字创建
      • 其他
      • 高级特性
    • 用户关键字
      • 语法
      • Teardown
    • 高级特性
  • 小结

简介

  • 这是一个基于python的测试框架
    • 支持web自动化,接口自动化,APP自动化测试
  • 使用关键字驱动,就是说可以用python封装出关键字
  • 使用关键字构建可被执行的测试用例

    Robot Framework is a generic open source automation framework for acceptance testing, acceptance test driven development (ATDD), and robotic process automation (RPA). It has simple plain text syntax and it can be extended easily with libraries implemented using Python or Java.

安装

  • 可以参考官方的说明
    • 中文手册(版本比较旧)
    • 对应的是官方的User Guide
  • 这里使用源码在Ubuntu上安装
    • Download files里复制链接下载,wget下来
    • 使用.whl配合pip install,或者.zip解压再unzip后,python setup.py install都可以
    • Windows环境下可以参考教程
  • 检查版本:robot --version
    • Robot Framework 4.1.1 (Python 3.5.2 on linux)
  • 在n174-h183机器上安装
    • 使用 pip3 install robotframework 安装
    • robot --version Robot Framework 4.1.2 (Python 3.6.8 on linux)

基础语法

  • 了解一下概念
    • 测试用例:由测试用例文件所创建,即test case
    • 测试套件:一个测试用例会自动创建测试套件
    • 测试套件文件夹:包含多个测试用例的文件夹,会形成一个高层级的test suite directory
      • 多个测试套件文件夹形成的文件夹又形成一个更高层级的目录
    • 测试库:包含最底层的关键字
    • 资源文件:包含高层次的用户关键字和变量
    • 变量文件:提供创建变量的方式

测试数据(Test Data)

  • 这里的Data就是我们自定义的robot语法的文件,后面统一称为测试用例或测试用例文件
    • case是由这些文件生成的
  • 都以section的格式定义
  • 支持tab分隔的TSV格式,纯文本格式,reStructuredText (reST)格式
    • 目前已经完全不支持HTML格式
    • 目前最常用的还是纯文本的空格分隔格式(Space separated format)和管道符(|)分隔格式
  • 可以通过后缀判断怎么解析文件:.tsv .txt .robot .rst .rest
    • 但测试用例一般用.robot
    • 资源文件一般用.resource
  • 不同格式都有测试用例的模板
  • 测试数据按结构划分为4部分
    1
  • 每个section都需要header标识,例如*** Settings ***
  • 每个section的作用自行翻译吧
  • 执行文件时,首先将数据拆分为行,然后将行拆分为关键字和参数等标记,看个例子吧:
    *** Settings ***	# 全局设置
    Documentation     Example using the space separated format.
    Library           OperatingSystem*** Variables ***
    ${MESSAGE}        Hello, world!*** Test Cases ***
    My Test[Documentation]    Example test.Log    ${MESSAGE}My Keyword    ${CURDIR}Another TestShould Be Equal    ${MESSAGE}    Hello, world!*** Keywords ***
    My Keyword[Arguments]    ${path}Directory Should Exist    ${path}# 下面是管道分隔符,可以称为单元格
    | *** Settings ***   |
    | Documentation      | Example using the pipe separated format.
    | Library            | OperatingSystem| *** Variables ***  |
    | ${MESSAGE}         | Hello, world!| *** Test Cases *** |                 |               |
    | My Test            | [Documentation] | Example test. |
    |                    | Log             | ${MESSAGE}    |
    |                    | My Keyword      | ${CURDIR}     |
    | Another Test       | Should Be Equal | ${MESSAGE}    | Hello, world!| *** Keywords ***   |                        |         |
    | My Keyword         | [Arguments]            | ${path} |
    |                    | Directory Should Exist | ${path} |
    
    • 使用空格分隔方式,关键字和参数之间使用两个或多个空格(推荐四个及以上),或者一个或多个Tab
    • reStructuredText文件是将code嵌入在robot文件中,可以使用code指令标记,这样的文件以.rst .rest结尾
    # 当执行一个包含 reStucturedText 文件的目录时,必须使用 --extension 选项来明确告诉这些文件应该被解析
    .. code:: python# This code block is ignored.def example():print('Hello, world!')
    

解析规则

  • Ignore:在解析robot文件时,会忽略以下内容
    • 评论(注释)
    • 空行,使用管道分隔的空单元格
    • #后的数据,类似python注释
  • Escape character(转义字符)
    • 一般使用\转义
    • 转义了特殊字符,就可以使用他们的字面值
      2
    • 有些使用\转移后,失去了字面值,我们也称之为转义序列
      3
    • 如果要转换成字节可以使用内置库中的函数
  • 转义空值
    • 当使用空值时必须将转义,否则可能会被忽略,下面是两个例子
      *** Test Cases ***
      Using backslash(反斜线)Do Something    first arg    \Do Something    \            second argUsing ${EMPTY}Do Something    first arg    ${EMPTY}Do Something    ${EMPTY}     second arg
      
    • 可以使用\或者${EMPTY}表示(相当于占位符)
    • 类似的,可以使用${SPACE}使空格不被忽略
  • 换行但继续
    • 又有时一行代码太长,需要换行继续写,可以使用...
      *** Settings ***
      Documentation      Here we have documentation for this suite.
      ...                Documentation is often quite long.
      ...
      ...                It can also contain multiple paragraphs.
      Default Tags       default tag 1    default tag 2    default tag 3
      ...                default tag 4    default tag 5*** Variable ***
      ${STRING}          This is a long string.
      ...                It has multiple sentences.
      ...                It does not have newlines.
      

测试用例

  • 测试用例(Test Case)是在测试用例文件的*** Test Cases ***部分定义的
  • 使用关键字构造,关键字可以从 使用测试库资源文件导入,也可以使用在当前测试用例文件中的 关键字
  • 看个例子吧
    *** Test Cases ***
    Valid Login	# 测试用例名称Open Login Page		# 关键字Input Username    demoInput Password    modeSubmit CredentialsWelcome Page Should Be OpenSetting VariablesDo Something    first argument    second argument${value} =    Get Some ValueShould Be Equal    ${value}    Expected value
    
  • 有一些可设置的项,为了和关键字区别,需要加上[ ]
    *** Test Cases ***
    Test With Settings[Documentation]    Another dummy test		# 用于指定 测试用例文档.[Tags]    dummy    owner-johndoeLog    Hello, world!
    # [Tags]	用于指定 测试用例的标签.
    # [Setup], [Teardown]	用于指定 Setup和Teardown.
    # [Template]	用于指定 测试模板. 测试用例本身将只包含数据, 每行数据都是传递给该关键字的参数, 最终实现数据驱动的测试.
    # [Timeout]		用于设置 test case timeout. timeouts 将在独立的章节讨论
    

参数

  • 关键字可以理解成函数,所以能带一个或多个参数
  • 必填参数(Positional arguments),也叫位置参数,因为实参的传递严格按照形参的位置给
    # syntax 语法
    *** Test Cases ***
    ExampleCreate Directory    ${TEMPDIR}/stuffCopy File    ${CURDIR}/file.txt    ${TEMPDIR}/stuffNo Operation
    # Create Directory Copy File 都是OperatingSystem library中定义好的关键字
    
  • 缺省参数(Default values),带默认值的参数
    # 这些东西和其他语言一样,带默认值的参数必须放在后面
    *** Test Cases ***
    ExampleCreate File    ${TEMPDIR}/empty.txtCreate File    ${TEMPDIR}/utf-8.txt         Hyvä esimerkkiCreate File    ${TEMPDIR}/iso-8859-1.txt    Hyvä esimerkki    ISO-8859-1# Create File 关键字的参数就是 path, content=, encoding=UTF-8. 所以可以只传一个path,content= 表示内容为空
    
  • 可变数量的参数(Variable number of arguments),通过在参数名称前加一个星号 * 来表示
    *** Test Cases ***
    ExampleRemove Files    ${TEMPDIR}/f1.txt    ${TEMPDIR}/f2.txt    ${TEMPDIR}/f3.txt@{paths} =    Join Paths    ${TEMPDIR}    f1.txt    f2.txt    f3.txt    f4.txt
    # Remove Files 和 Join Paths, 参数分别是 *paths 和 base, *parts. 
    # 类似于python中的*args ,使用元组接收
    # 和位置参数/缺省参数一起使用时,必须放在最后,这部分参数就没有名字了
    
  • 命名参数(Named arguments)
    • 定义时给默认值的叫缺省参数
    • 调用时指定参数名字的,叫命名参数,更灵活
    • 这里有个问题,关键字中调用另一个关键字,Run Program 把所有的参数都通过@{args}传递,可能其中包含的命名参数shell=True不会被识别
    *** Test Cases ***
    ExampleRun Program    shell=True    # This will not come as a named argument to Run Process*** Keywords ***
    Run Program[Arguments]    @{args}Run Process    program.py    @{args}    # Named arguments are not recognized from inside @{args}
    
    • 其实就是说,如果调用时想使用和传递任意的命名参数,关键字定义时必须使用**kwargs形式,和Python一样!这里叫任意命名参数(free named argument)
    • 因为可变数量参数*args是没有名字的,相当于不限数量的位置参数
    • 当前最新的版本中, 所有的关键字都可以使用 **kwargs,Java测试库也支持
    *** Test Cases ***
    Using KwargsRun Process    program.py    arg1    arg2    cwd=/home/userRun Process    program.py    argument    shell=True    env=${ENVIRON}
    # 当然,如果不看定义关键字的语法,arg1  arg2 可能是位置参数,可能是缺省参数,也可能是可变数量参数;cwd=/home/user
    # 可能是缺省参数,也可能是任意命名参数
    

失败处理

  • 一个测试用例中用到的任何一个关键字发生失败, 则该用例也执行失败
  • 但是可以使用 Test Teardown 模式和特殊的continuable failures让测试继续执行
    • 后面会有详细介绍,Teardown后有关键字失败但仍可继续其他关键字
  • 错误信息
    • 测试用例的错误信息直接来源于失败的关键字
    • 有的关键字允许用户配置错误信息
    • 完整的信息总是可以在 log 文件中找到;因为report中会截断过长的信息
    • 可以使用HTML格式,只需要在定义错误信息时前面加上*HTML*
    *** Test Cases ***
    Normal ErrorFail    This is a rather boring example...HTML Error${number} =    Get NumberShould Be Equal    ${number}    42    *HTML* Number is not my <b>MAGIC</b> number.
    

名称和文档

  • 测试用例的名称在一个 test suite 中是唯一的
    • 或者说,一个test case的name代表测试的一个最小单位,里面可以包含多个关键字(步骤)
  • 可以通过变量 ${TEST_NAME} 指定,这个变量在测试执行的任何阶段都可以访问到
  • 哦忘了说,*** Test Cases ***下第一行顶头的就是用例名,可以使用变量
    *** Variables ***
    ${MAX AMOUNT}      ${5000000}*** Test Cases ***
    Amount cannot be larger than ${MAX AMOUNT}	# 如果这个变量不存在,那就只有左侧的部分# ...
    
  • 文档 [Documentation] 用来为用例设置一段文档说明. 这个说明会显示在命令行的输出中, 以及后续的测试日志和测试报告中
  • 文档中可以使用HTML格式和变量
    *** Test Cases ***
    Variables[Documentation]    Executed at ${HOST} by ${USER}No OperationSplitting[Documentation]    This documentation    is split    into multiple columns	# 两个空格以上,分为多列No OperationMany lines[Documentation]    Here we have...                an automatic newlineNo Operation
    
  • 测试用例有一个清楚的, 描述性的名称就可以不需要文档了
  • 如果涉及元数据(environment & user information)等,可以使用打标签的方式

标签

  • 标签的作用
    • 标签在 reports, logs 以及测试数据中展示, 提供关于测试用例的元数据信息
    • 用例的 统计 (total, passed, failed 就是自动基于标签收集的)
    • 使用标签, 可以 包含或排除 测试用例(这个有点小复杂)
    • 使用标签, 可以指定哪些用例可以跳过
  • Settings这个section中可以定义不同类型的Tag
    • Force Tags,所有用例都被指定打上这些标签
    • Default Tags,没有单独设置 [Tags] 的用例将被打上这些默认标签(半强制)
    • [Tags],在Test Casessection中使用,可以设置一个空值(NONE)来覆盖默认标签
    • --settag,可以通过命令行执行,给所有case加上tag
    • Set Tags, Remove Tags内置关键字动态操纵tag
    • 标签可以使用变量创建(如果变量存在)
    *** Settings ***
    Force Tags      req-42
    Default Tags    owner-john    smoke*** Variables ***
    ${HOST}         10.0.1.42*** Test Cases ***
    No own tags[Documentation]    This test has tags owner-john, smoke and req-42.No OperationWith own tags[Documentation]    This test has tags not_ready, owner-mrx and req-42.[Tags]    owner-mrx    not_ready	# 两个以上空格No OperationOwn tags with variables[Documentation]    This test has tags host-10.0.1.42 and req-42.[Tags]    host-${HOST}No OperationEmpty own tags[Documentation]    This test has only tag req-42.[Tags]		# 覆盖默认tagNo OperationSet Tags and Remove Tags Keywords[Documentation]    This test has tags mytag and owner-john.Set Tags    mytagRemove Tags    smoke    req-*
    
  • 有一些特殊的标签,用户不能自定义,这些标签都以robot-前缀开头
    • 例如robot-exit表示优雅的结束测试
  • 4.1版本开始,统计信息默认不显示,可以通过在启动测试命令行中添加--tagstatinclude 'robot:* 显示

Setup&Teardown

  • 简而言之, setup在测试用例之前执行, 而teardown在测试用例之后执行
    • 类似CSS的伪类选择器
  • 都是带参数的关键字,并且各自只能指定一个关键字.
  • 如果涉及到多个步骤, 只能创造一个更高层的用户关键字(user keywords)
    • 也可以使用 BuiltIn 中关键字 Run Keywords 来执行多个关键字
  • Teardown is special in two ways
    • 在用例失败时也会被执行,常用来做测试环境的清理工作
    • 所有的关键字都会被执行, 哪怕其中有的执行失败;之前在失败处理部分也介绍过(失败仍继续)
      • 普通的关键字也能有失败后继续的模式,但是默认关闭
  • 使用方法
    • 在Settings中
    *** Settings ***
    Test Setup       Open Application    App A
    Test Teardown    Close Application		# 给每个case都加上S&T
    
    • 每个单独的用例也可以指定自身的Setup或Teardown
    *** Test Cases ***
    Default values[Documentation]    Setup and teardown from setting tableDo SomethingOverridden setup[Documentation]    Own setup, teardown from setting table[Setup]    Open Application    App BDo SomethingNo teardown[Documentation]    Default setup, no teardown at allDo Something[Teardown]	# 覆盖Settings section中的设置
    
    • Setup或Teardown中指定的关键字名称可以使用变量传递
    • S&T针对最小测试单位,即每个test case name中都有

测试模板

  • 测试模板将普通的 keyword-driven 测试转为 data-driven 测试
  • 很简单,在[Template]中指定关键字,后续写参数就可以,也可在Settings中全局设置
  • 针对重复使用同一关键字时
    *** Test Cases **
    Normal test caseExample keyword    first argument    second argumentTemplated test case[Template]    Example keywordfirst argument    second argument*** Settings ***
    Test Template    Example keyword*** Test Cases ***
    Templated test casefirst round 1     first round 2second round 1    second round 2third round 1     third round 2		# 默认失败后继续,第一轮失败了,second round继续Normal test case with embedded arguments	# 内嵌参数的模板The result of 1 + 1 should be 2The result of 1 + 2 should be 3Template with embedded arguments[Template]    The result of ${calculation} should be ${expected}1 + 1    21 + 2    3Template and for		# 带for循环的模板[Template]    Example keyword:FOR    ${item}    IN    @{ITEMS}\    ${item}    2nd arg:FOR    ${index}    IN RANGE    42\    1st arg    ${index}
    

类型

  • 测试用例大概分为关键字驱动型、数据驱动型和行为驱动型
  • 关键字驱动型,也叫流程驱动型
    • 即本文“测试用例”一开始的那个例子
    • 系统进入某个初始状态
    • 然后对系统执行一些操作
    • 最后校验是否符合某个预期
  • 数据驱动型
    • 仅使用一个高级别关键字(一般是user keywords)
    • 针对某个相同的测试场景反复多次测试时;例如测试对非法信息登陆的检测功能
    *** Settings ***
    Test Template    Login with invalid credentials should fail	# 高级关键字*** Test Cases ***                USERNAME         PASSWORD	# 给列命名使得测试用例更易读易懂
    Invalid User Name                 invalid          ${VALID PASSWORD}
    Invalid Password                  ${VALID USER}    invalid
    Invalid User Name and Password    invalid          invalid
    Empty User Name                   ${EMPTY}         ${VALID PASSWORD}
    Empty Password                    ${VALID USER}    ${EMPTY}
    Empty User Name and Password      ${EMPTY}         ${EMPTY}
    
    • 当然,也可以换一种模式,例如针对invalid password进行混合测试,具体怎么使用看场景和个人喜好
    *** Test Cases ***
    Invalid Password[Template]    Login with invalid credentials should failinvalid          ${VALID PASSWORD}${VALID USER}    invalidinvalid          whatever${EMPTY}         ${VALID PASSWORD}${VALID USER}    ${EMPTY}${EMPTY}         ${EMPTY}
    
  • 行为驱动型
    • 按照需求的格式来编写测试用例,,让非技术型的项目成员也能理解
    • 即可执行的需求,所以也叫验收测试驱动开发(ATDD)
    • 一般按照Given-When-Then格式
      • 初始的状态通常由 Given 起始的关键字开始(在哪测)
      • 其中的操作由 When 开头的关键字描述(测什么)
      • 而预期结果则由 Then 开头的关键字处理(啥情况)
      • 如果某个步骤需要多次,使用And/But
    *** Test Cases ***
    Valid LoginGiven login page is openWhen valid username and password are insertedand credentials are submittedThen welcome page should be open	# 预期是成功登陆
    
    • 这些关键字可以忽略,上例中的 Given login page is open 实现为用户关键字的时候,关键字名称带不带 Given 前缀都可以
    • 忽略前缀可以使得同一个关键字带上不同的前缀使用;个人感觉在自定义关键字时还是避免使用这些关键字

测试套件

  • 上面一小节了解了测试用例文件,它会自动创建了一个测试套件, 包含其中所有的测试用例
    • 从robot、test data/test case file到test case的关系,他们的关系可以理解成python -> .py -> def
    • 形式上,一个py文件中包含多个测试函数(别超过十个),函数名即这里的每个case名称
  • 这节了解测试套件(test suite
    • 一般,一个测试用例文件形成一个测试套件,也可以多个测试用例组织形成一个套件
    • 套件和测试文件可以是一对一和一对多的关系,套件中的一些设置更便于测试执行和管理
    • 最终测试的流程还是得test case file定义,最终的执行交给suite
  • 从3.1版本之后新增了创建任务task的功能,和创建测试文件一样,也能生成套件(task suite)

自定义

  • 自定义测试套件(customize test suite),直接在测试用例文件Setting section中
    • Documentation
    • Metadata
    • Suite Setup, Suite Teardown
    • 都可以加冒号
  • 测试套件文件夹
    • 测试用例文件可以组织在文件夹中,形成更高级的测试套件(目录套件)
    • 生成的目录套件夹不能直接包含case,但是可以包含其他套件(这些套件中包含case)
    • 当一个测试目录被执行, 其中的文件和子目录会按如下规则递归处理:
      • 以点 . 或下划线 _ 开头的文件/目录名——忽略
      • 目录 CVS (注意大小写)——忽略
      • 文件的扩展名不在 可识别扩展名 之列的(.tsv, .txt, .rst, 或 .rest) ——忽略
      • 其它文件和目录被忽略
      • 如果被处理的文件或者目录下不包含任何用例,则也会忽略
    • 非法文件警告
      • 一般情况下,不包含合法测试用例表格的文件会被忽略掉,但同时把消息写入系统日志
      • 可以在命令行中指定选项 --warnonskippedfiles, 这样就将该消息作为警告处理,警告消息最终出现在 测试执行错误区
    • OK,以后测试套件就分别称为测试套件(test case file直接生成)和目录套件(test case files directory 生成)
  • 初始化
    • 目录创建的测试套件和文件创建的套件一样有类似的设置,但需要在初始化文件中整
    • 文件名:__init__.ext,借鉴自python
    • 初始化文件中除了不能包含测试用例表格(test case),以及不支持某些设置项,其它一样
    • 初始化文件中创建或者导入的变量和关键字在下层的测试套件中 不可用,主要是设置一些东西
    • 想要共享变量和(或)关键字, 可以放在资源文件,再由测试用例文件导入
    • 设置方法:
      Documentation, Metadata, Suite Setup, Suite Teardown这些测试套件相关的设置和测试用例文件中的设置一样.
      Force Tags为下面的所有用例指定标签.
      Test Setup, Test Teardown, Test Timeout为下面的测试用例设置默认的 setup/teardown 或 超时动作. 测试用例可以单独设置以覆盖这里的配置.
      Default Tags, Test Template不支持
      
    • 来个例子吧:
      *** Settings ***
      Documentation    Example suite
      Suite Setup      Do Something    ${MESSAGE}
      Force Tags       example
      Library          SomeLibrary*** Variables ***
      ${MESSAGE}       Hello, world!*** Keywords ***
      Do Something[Arguments]    ${args}Some Keyword    ${arg}Another Keyword
      
  • 名称和文档
    • 测试套件的名称由文件或目录名称构造,首字母大写并使用空格代替下划线
      • 例如测试目录是my_test_directory,生成的套件名称就是:My Test Directory
    • 文件或目录名称可以包含前缀来控制测试集的执行顺序
      • 例如01__some_tests.txt02__more_tests.txt 创建的测试用例集名称分别是 Some TestsMore Tests,并且前者会先执行
      • 规则也很明显,序号+双下划线
    • test suite的文档可以在初始化文件中写,也可以直接写在test case file中
    • Both the name and documentation of the top-level test suite can be overridden in test execution
      • This can be done with the command line options --name and --doc
  • 元数据
    • 通过在 Setting section中使用 Metadata 设置项来指定
    • 设置的元数据会在测试报告和日志文件中展示
      *** Settings ***
      Metadata    Version        2.0
      Metadata    More Info      For more information about *Robot Framework* see http://robotframework.org
      Metadata    Executed At    ${HOST}
      
    • 可以分成namevalue两部分
    • 同样的,可以通过--metadata command line 指定
  • Setup&Teardown
    • 测试套件的Setup在其中所有测试用例和子套件运行之前被执行,Teardown则是在之后执行
    • OK,到目前,应该明白了test case file和suite的关系,类似于python的类和对象,这里的类可以组合生成高级类从而有高级对象;最终是以套件的形式运行(方便组织和管理)
    • 感性认识,后面在实际案例中就可以具体理解
      test case file -> test suite(this file's cases)
      test case file directory -> high level test suite(test case files -> test suites -> cases)
      
    • 如果一个测试套件的Setup执行失败了,该套件下的所有子套件和用例会立即置为失败状态
      • 利用这种特性,可以来检验用例执行的必要前置条件是否满足

测试库

  • 测试库中包含底层的关键字(lowest-level keywords), 通常称之为 库关键字(library keywords)
  • user keywords 会调用这些底层关键字
  • 导入库
    • 可以Import,也可以Library导入
      • 当测试库在测试执行前不能导入, 只能在执行过程中通过某些关键字来启用时,使用import
    # 使用的位置也不一样
    *** Test Cases ***
    ExampleDo SomethingImport Library    MyLibrary    arg1    arg2KW From MyLibrary
    
    • 库可以使用参数和变量
    *** Settings ***
    Library    OperatingSystem
    Library    my.package.TestLibrary
    Library    MyLibrary    arg1    arg2
    Library    ${LIBRARY}
    
    • 大小写敏感,空白敏感
    • 可以用库名和库的路径导入
      • 安装的库在module search path中可以直接找到,但是自定义的库需要配置到里面
      • 使用路径就不需要了,如果库是文件,需要带上扩展名
    *** Settings ***
    Library    PythonLibrary.py
    Library    /absolute/path/JavaLibrary.java
    Library    relative/path/PythonDirLib/    possible    arguments
    Library    ${RESOURCES}/Example.class
    
  • 设置别名
    • 测试库的名称在日志文件中会在关键字的前面展示
      • 如果关键字重名,就要加上库名称做前缀
    • 库的名称一般就是实现该库的模块或类名,但有时需要改变
      • 需要不止一次的导入一个相同的库, 每次使用不同的参数. 如果每次是相同的名称则不可能做到
      • 库名非常长, 不方便. 比如, 有超长包名的Java库
      • 在不同的环境中使用不同的测试库, 但是希望以相同的名称引用它们
      • 库的名称起的不好, 有误导作用 (当然, 这时候更应该改名)
    • 指定新名称可以使用WITH NAME
      *** Settings ***
      Library    com.company.TestLib    WITH NAME    TestLib
      Library    ${LIBRARY}             WITH NAME    MyName
      Library    SomeLibrary    localhost        1234    WITH NAME    LocalLib
      Library    SomeLibrary    server.domain    8080    WITH NAME    RemoteLib	# 参数放在with name之前
      

标准库

  • 随 Robot Framework 版本一同发布的测试库称之为 标准库
  • 其中 BuiltIn 最特别,可以自动启用,无需导入
  • 其他标准库
    Collections
    DateTime
    Dialogs
    OperatingSystem
    Process
    Screenshot
    String
    Telnet
    XML
    
  • 还有远程库和外部库
  • 库文件放在automation/lib

变量

  • 一直在提到变量这个概念,看到这,相信已经知道的差不多了
  • 大部分情况下, 变量用于关键字的参数;当然,设置项也都支持用变量来指代设置值
  • 变量类型,和Perl语言很像
    • 标量 ${SCALAR}
    • 列表 @{LIST}
    • 字典 &{DICT},perl中用%,而且这里都要加花括号
    • 环境变量 %{ENV_VAR}
  • 推荐使用大写字母表示全局变量${PATH},小写字母表示局部变量${myVar}(或者驼峰)
    • 不区分大小写,下划线和空格也会被忽略

标量

  • 通常被赋值字符串
    *** Test Cases ***
    ${GREET} = Hello
    ${NAME} = 123VariablesLog    ${GREET}Log    ${GREET}, ${NAME}	# 先转换成unicode字符串,123->‘123’,这里逗号将两个变量作为一个参数
    # 注:如果变量不是单独使用,即这里一个参数中两个及以上变量;its value is first converted into a string and then concatenated with the other data
    # 用到python的__str__方法,或者java的toString方法,返回字符串或return值
    

列表

  • 如果使用列表,里面的元素会分别传递给不同参数,下面两个例子等价
    *** Test Cases ***
    ConstantsLogin    robot    secretList VariableLogin    @{USER}
    
  • 从4.0版本开始,列表扩展可与列表项访问结合使用,总体和python一致
    *** Test Cases ***
    Nested container${nested} =    Evaluate    [['a', 'b', 'c'], {'key': ['x', 'y']}]Log Many    @{nested}[0]         # Logs 'a', 'b' and 'c'.Log Many    @{nested}[1][key]    # Logs 'x' and 'y'.Slice${items} =    Create List    first    second    thirdLog Many    @{items}[1:]         # Logs 'second' and  'third'.	切片操作什么的和python一致
    # 注:不允许字符串作为字符列表使用,但是其它的序列对象如元组或字典是可以的(类似列表的对象)Keyword    @{LIST}    @{ANOTHER}    @{ONE MORE}	# 注意,多个参数要用tab隔开,否则会做字符串处理
    
  • 有些场景不能使用列表变量传递,一般导入库和执行关键字不能使用
    *** Settings ***
    Library         ExampleLibrary      @{LIB ARGS}    # This works
    Library         ${LIBRARY}          @{LIB ARGS}    # This works	可以作为库的参数
    Library         @{NAME AND ARGS}                   # This does not work	不能直接传递库名,因为Library一次只能导入一个库,后面的会被当作参数
    Suite Setup     Some Keyword        @{KW ARGS}     # This works
    Suite Setup     ${KEYWORD}          @{KW ARGS}     # This works
    Suite Setup     @{KEYWORD}                         # This does not work	同样,参数可以,关键字名称不能使用列表,suite后只能跟一个关键字
    Default Tags    @{TAGS}                            # This works
    

字典

  • 和列表类似,能够以命名参数的形式,分别赋值给不同参数
    *** Test Cases ***
    ConstantsLogin    name=robot    password=secretDict VariableLogin    &{USER}Keyword    positional    @{LIST}    &{DICT}	# 混用时要注意位置*** Settings ***
    Library        ExampleLibrary    &{LIB ARGS}
    Suite Setup    Some Keyword      &{KW ARGS}     named=arg	# 充当参数使用
    

环境变量

  • 就是操作系统的环境变量
    *** Test Cases ***
    Env VariablesLog    Current user: %{USER}Run    %{JAVA_HOME}${/}javac
    
  • 可以在执行中设置,但是用例结束就会恢复

创建

  • 变量的创建在test case file的Variables section
    *** Variables ***
    ${NAME}         Robot Framework
    ${VERSION}      2.0
    ${ROBOT}        ${NAME} ${VERSION}
    ${NAME} =       Robot Framework		# = 不是必须的
    ${VERSION} =    2.0
    
    • 变量名也不是随便起的,例如 ${true} 就表示true,${None}就表示python的None
  • 标量值被分隔成多个参数的形式(tab)还是会以空格拼接
    *** Variables ***
    ${EXAMPLE}      This value is joined    together with a space
    ${MULTILINE}    SEPARATOR=\n    First line
    ...             Second line     Third line
    
  • 列表变量
    *** Variables ***
    @{NAMES}        Matti       Teppo
    @{NAMES2}       @{NAMES}    Seppo
    @{NOTHING}
    @{MANY}         one         two      three      four
    ...             five        six      seven
    # 前面的例子也看到使用关键字创建
    
  • 字典变量
    *** Variables ***
    &{USER 1}       name=Matti    address=xxx         phone=123
    &{USER 2}       name=Teppo    address=yyy         phone=456
    &{MANY}         first=1       second=${2}         ${3}=third
    &{EVEN MORE}    &{MANY}       first=override      empty=
    ...             =empty        key\=here=value		# 转义# 字典的获取,比较特殊
    &{USER}[name]
    ${USER.name}	# 注意,这里使用 $,和perl语言类似
    ${MANY.3}	# 不可以,${3}是一个变量
    
    • 字典变量中的项是有顺序
  • 变量文件
    • 使用变量文件可以给变量赋值为任意的对象,还可以动态地创建变量

    • 资源文件通过在 Settings 中设定 Resource 来引入

      *** Settings ***
      Resource    myresources.html
      Resource    ../data/resources.html
      Resource    ${RESOURCES}/common.tsv	# 推荐使用变量
      
      • 定义在资源文件中的用户关键字和变量在导入后即可使用
      • 该资源文件中从其它文件(测试库/资源文件/变量文件)导入的关键字和变量的关键字,也可用
      • 资源文件的整体结构和测试用例文件一样, 只不过其中不能包含测试用例(Test cases section)
      • 资源文件放在automation/resource下(n147-h183)
      # 相较Library更高级,Library定义的主要是关键字,而Resourse与test  case file极狐无异*** Settings ***
      Documentation     An example resource file	# 这个不会写入日志
      Library           Selenium2Library
      Resource          ${RESOURCES}/common.robot*** Variables ***
      ${HOST}           localhost:7272
      ${LOGIN URL}      http://${HOST}/
      ${WELCOME URL}    http://${HOST}/welcome.html
      ${BROWSER}        Firefox*** Keywords ***
      Open Login Page[Documentation]    Opens browser to login page		# 第一行写入日志Open Browser    ${LOGIN URL}    ${BROWSER}Title Should Be    Login PageInput Name[Arguments]    ${name}Input Text    username_field    ${name}Input Password[Arguments]    ${password}Input Text    password_field    ${password}
      
    • 不好意思,走错片场了,应该说变量文件,在 Settings 中设定 Variables 来引入

      # 类似的
      *** Settings ***
      Variables    myvariables.py
      Variables    ../data/variables.py
      Variables    ${RESOURCES}/common.py
      Variables    taking_arguments.py    arg1    ${ARG2}
      
      • 如果多个文件内的变量冲突,则最先导入的生效,资源文件亦是如此
      • 可以通过命令行 --variablefile myvariables.py 指定
  • 可以通过命令行设置变量
    --variable EXAMPLE:value	# 标量
    --variable HOST:localhost:7272 --variable USER:robot	# 字典
    
  • 关键字的返回值可以赋值给变量,不同的关键字之间就可以交互了
    *** Test Cases ***
    Returning${x} =    Get X    an argumentLog    We got ${x}!${a}    ${b}    ${c} =    Get ThreeExample${list} =    Create List    first    second    third	# 都可以用标量接收,也可以直接@{list}Length Should Be    ${list}    3Log Many    @{list}	# 能当列表用,能当字典用
    
    • 变量类型视值而定

关键字创建

  • BuiltIn_ 测试库提供了几个可以在测试执行时动态设置变量的关键字
  • Set Test Variable 设置的变量在当前测试用例的作用域内处处可用
  • Set Suite Variable 创建的变量在当前执行的测试套件内处处可见,子套件就不可见
  • Set Global Variable 创建的变量在设置之后全局可见,谨慎使用!

其他

  • 内置变量,全局的
  • 操作系统变量
  • 数字变量
  • 布尔值
  • 空格和空字符串:${SPACE}${EMPTY}
  • 自动变量

高级特性

用户关键字

  • 貌似来到了最关键的部分,User Keywords
  • 组合已有的关键字来创建新的高层次的关键字,被称之为 用户关键字

语法

  • 大部分和test case的语法一致,关键字名,参数…
  • case中使用关键字,要传参;这里是定义关键字
    • 所以,前面的感性认识不太恰当,test case相当于函数调用,Keywords才是def
    *** Keywords ***
    Open Login PageOpen Browser    http://host/login.htmlTitle Should Be    Login PageTitle Should Start With[Arguments]    ${expected}${title} =    Get TitleShould Start With    ${title}    ${expected}
    
    • 在资源文件中创建的关键字在导入了该资源文件后即可使用
    • 其它文件中创建的关键字只在所在文件内可用
    • 关键字名称往往具有描述性,有时可能是一句话甚至段落
  • 设置项
    [Documentation]用户关键字文档.
    [Tags]Sets tags for the keyword.
    [Arguments]指定用户关键字的参数	specifies
    [Return]Specifies 用户关键字返回值
    [Teardown]Specify 用户关键字的Teardown
    [Timeout]Sets the possible user keyword timeout. Timeouts are discussed in a section of their own.
    
    • 在文档开始前使用 *DEPRECATED* 可以标记该用户关键字已经不建议使用
    • 关键字的标签不受Force/Default Tag影响,但可以在文档中打标签!
    *** Keywords ***
    Settings tags using separate setting[Tags]    my    fine    tagsNo OperationSettings tags using documentation[Documentation]    I have documentation. And my documentation has tags....                Tags: my, fine, tags		# 牛不牛?No Operation# 避免使用robot-
    
    • 参数必须使用[Argument]设置,参数的名称和变量一样!什么标量啊花括号啊之类的
    *** Keywords ***
    One Argument[Arguments]    ${arg_name}Log    Got argument ${arg_name}Three Arguments[Arguments]    ${arg1}    ${arg2}    ${arg3}Log    1st argument: ${arg1}Log    2nd argument: ${arg2}Log    3rd argument: ${arg3}# 带默认值的参数
    One Argument With Default Value[Arguments]    ${arg}=default value[Documentation]    This keyword takes 0-1 argumentsLog    Got argument ${arg}# 可变参数
    Any Number Of Arguments[Arguments]    @{varargs}Log Many    @{varargs}# 同样的,还有任意命名参数
    Kwargs Only[Arguments]    &{kwargs}Log    ${kwargs}Log Many    @{kwargs}
    
  • 关键字名称中嵌入参数,关键字工厂的感觉
    *** Keywords ***
    Select ${animal} from listOpen Page    Pet SelectionSelect Item From List    animal_list    ${animal}
    
    • 关键字被调用时自然而然的传递给对应位置的参数
    • 嵌入参数可能会因为实参格式问题发生错误,一个简单的解决方法是把参数用引号括起来
      • 例如 Select “${city}” “${team}”), 然后调用时同样使用引号传参 Select “Los Angeles” “Lakers”)
    • 还可以通过正则表达式解决
    *** Test Cases ***
    ExampleI execute "ls"I execute "ls" with "-lh"Today is 2011-06-27	*** Keywords ***
    I execute "${cmd:[^"]+}"		# 表示该参数不能包含任何引号,就能和下面的关键字区分开,避免把 ls" with "-lh 当成参数Run Process    ${cmd}    shell=TrueI execute "${cmd}" with "${opts}"Run Process    ${cmd} ${opts}    shell=TrueToday is ${date:\d{4\}-\d{2\}-\d{2\}}	# 正则中的花括号必须转义,否则变量会提前结束Log    ${date}
    
    • 也就是说,推荐使用引号+正则的形式
    • 这里有个嵌入变量的行为驱动的例子:体会嵌入的灵活性
    *** Test Cases ***
    Add two numbersGiven I have Calculator open	# Given, When 和 Then不是关键字名称的一部分When I add 2 and 40Then result should be 42Add negative numbersGiven I have Calculator openWhen I add 1 and -2Then result should be -1*** Keywords ***
    I have ${program} openStart Program    ${program}I add ${number 1} and ${number 2}Input Number    ${number 1}Push Button     +Input Number    ${number 2}Push Button     =Result should be ${expected}${result} =    Get ResultShould Be Equal    ${result}    ${expected}
    
  • 返回值
    • 可以通过Return 设置
    *** Keywords ***
    Return One Value[Arguments]    ${arg}Do Something    ${arg}${value} =    Get Some Value[Return]    ${value}		# 放在一个标量保存起来!Return Three Values[Return]    foo    bar    zap
    
    • 也可以通过特殊关键字返回值
    *** Keywords ***
    Return One Value[Arguments]    ${arg}Do Something    ${arg}${value} =    Get Some ValueReturn From Keyword    ${value}Fail    This is not executedFind Index		# 如何在for循环中使用特殊关键字返回值[Arguments]    ${element}    @{items}${index} =    Set Variable    ${0}:FOR    ${item}    IN    @{items}\    Return From Keyword If    '${item}' == '${element}'    ${index}\    ${index} =    Set Variable    ${index + 1}Return From Keyword    ${-1}    # Could also use [Return]
    

Teardown

  • 和test case的一样,可以设置teardown
    *** Keywords ***
    With TeardownDo Something[Teardown]    Log    keyword teardownUsing variables[Documentation]    Teardown given as variableDo Something[Teardown]    ${TEARDOWN}
    

高级特性

  • 处理同名关键字
  • 超时处理
  • FOR循环
  • 条件表达式
  • 关键字并发执行

小结

  • 这节主要介绍robot framework的基本概念和语法
  • 包括设置/文档/变量/测试库/用户关键字/测试用例/测试用例文件/测试套件
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 全球及中国绝缘材料用沸石行业“十四五”前景规划及未来发展趋势报告2021年版

    全球及中国绝缘材料用沸石行业“十四五”前景规划及未来发展趋势报告2021年版 2020年&#xff0c;全球绝缘材料用沸石市场规模达到了 百万美元&#xff0c;预计2027年可以达到 百万美元&#xff0c;年复合增长率(CAGR)为 % (2021-2027)。中国市场规模增长快速&#xff0c;预…...

    2024/5/1 9:40:43
  2. idea显示java: 错误: 无效的源发行版:16

    点击&#xff1a;file>Project Structure>Project 中 jdk版本最好改为1.8版本的&#xff0c;或者 低于或等于14版本的...

    2024/5/1 18:19:11
  3. spring boot 修改代码自动重启

    1.修改pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional> </dependency> 2.修改application.…...

    2024/5/1 8:01:36
  4. FairMOT

    cython-bbox安装教程...

    2024/5/1 19:36:30
  5. Operator基础

    目录 概念 工作流程 Operator Framework 概念 CRD (Custom Resource Definition): 允许用户自定义 Kubernetes 资源&#xff0c;是一个类型&#xff1b; CR (Custom Resourse): CRD 的一个具体实例&#xff1b; webhook: 它本质上是一种 HTTP 回调&#xff0c;会注册到 …...

    2024/5/1 0:34:21
  6. 万物互联、应用现代化、云原生新范式,华为云为数字化转型提供最优解

    10月27日&#xff0c;华为云TechWave全球技术峰会&#xff08;应用现代化&#xff09;在广州举办。华为云发布“云原生2.0”新范式&#xff0c;并分享应用现代化、万物互联等最新理念及产品进展。 华为云CTO张宇昕发表主题演讲 华为云CTO张宇昕表示&#xff1a;“云原生新范式…...

    2024/5/1 16:43:37
  7. String小结

    在Java中&#xff0c;String可以说是一个数据类型&#xff0c;也可是说是一个数据类型&#xff0c;我们知道Java中,数据类型分为基本数据类型和引用数据类型&#xff0c;引用数据类型包括&#xff1a;类&#xff0c;接口&#xff0c;数组,由于String 是类&#xff0c;所以它又是…...

    2024/5/1 14:51:25
  8. 风电消防主机联网通信问题的解决方法

    一、概述 风力发电机组是将风能转换为电能的系统。风能作为清洁环保的可再生能源&#xff0c;具有传统能源不可比拟的优越性&#xff0c;也是再生能源中技术*成熟、*具规模的一种。它主要由叫叶轮、机舱和塔架三部分构成。 风力发电机组在长期运行中很容易产生摩擦过热、制动过…...

    2024/5/1 18:19:05
  9. C语言练习题:位运算【<<左移,>>右移】

    1 #include <stdio.h>2 int main() 3 { 4 /* 位运算 */ 5 unsigned char a 0xb3,b,c; 6 b a<<4; 7 c a>>4; 8 c c | b; 9 printf("%d\n",c); 10 11 return 0; 12 }运算过程&#xff1a; 因为 a 是char型存储&#xff08;即计算机…...

    2024/5/1 18:20:14
  10. AT指令详解

    1 简介 1.1 名词术语 1. TE Terminal Equipment 终端设备与DTE 等价比如一个计算机 它是和信息网络的一端相接的可提供必要功能的设备这些功能使得用户通过接入协议能接入网络如发送信息和接收信息也可挃由线路电路信道数据链路的终端或起点组成的设备 2. TA Terminal Adapter …...

    2024/5/1 7:54:33
  11. Python——列表和元组,到底用哪一个?

    Python——列表和元组&#xff0c;到底用哪一个&#xff1f;列表和元组基础列表和元组存储方式的差异列表和元组的性能列表和元组的使用场景总结列表和元组基础 首先&#xff0c;我们需要弄清楚最基本的概念&#xff0c;什么是列表和元组呢&#xff1f; 实际上&#xff0c;列…...

    2024/5/1 20:08:45
  12. LeetCode:125. 验证回文串————简单

    题目 125. 验证回文串 给定一个字符串&#xff0c;验证它是否是回文串&#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。 说明&#xff1a;本题中&#xff0c;我们将空字符串定义为有效的回文串。 示例 1: 输入: "A man, a plan, a canal: Panama&q…...

    2024/5/1 16:26:23
  13. 58同城面经

    房产部门&#xff0c;负责58主站房产板块和安居客的技术中台 一面 0、自我介绍 1、String StringBuilder StringBuffer 2、HashMap连环问 3、算法&#xff1a;找出数组中最小的数。听到这个题目我当时愣了好久&#xff0c;反复确认好几次题目意思。面试官以为我不会&#…...

    2024/5/1 13:35:51
  14. Chrome 抓包

    ...

    2024/4/28 13:37:24
  15. memcached 与 redis 的区别

    1、Redis 不仅仅支持简单的 k/v 类型的数据&#xff0c;同时还提供 list&#xff0c;set&#xff0c;zset&#xff0c;hash 等数据结构的存储。而 memcache 只支持简单数据类型&#xff0c;需要客户端自己处理复 杂对象 2、Redis 支持数据的持久化&#xff0c;可以将内存中的数…...

    2024/4/28 19:11:37
  16. Leetcode 35. 搜索插入位置 c#

    给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入…...

    2024/4/30 10:54:46
  17. 常用的8个Python数据可视化库

    文章分享自 GoodMai 好买网 Python是一门非常优秀的编程语言&#xff0c;被广泛的应用于各个领域&#xff0c;它不仅简单、易懂、语法清晰&#xff0c;还拥有各种各样的库&#xff0c;让我们的工作更高效、更便捷。今天为大家分享8个Python库&#xff0c;有了它们之后&#xf…...

    2024/4/30 1:26:15
  18. 解决无法使用Conda创建PyCharm虚拟环境的问题

    解决无法使用Conda创建PyCharm虚拟环境的问题 用Conda创建虚拟环境时一直显示未连接&#xff0c;报错如下 CondaHTTPError: HTTP 000 CONNECTION FAILED for url 本来以为是镜像的问题但使用清华和中科大的镜像后发现都不行&#xff0c;最后搜到这两个镜像服务都关闭了&#x…...

    2024/4/30 0:18:18
  19. Java实战——薪资转换

    题目要求 当用户输入月薪时&#xff0c;计算出对应的日薪&#xff08;每月工作日22天&#xff09;和年薪&#xff08;1年13薪&#xff09;&#xff0c;并进行输出显示&#xff0c;如图所示&#xff1a; 代码演示 import java.util.Scanner;//导入Scanner类 public class Sa…...

    2024/4/27 10:48:29
  20. 【Node.js】使用Multer的文件上传下载

    上回说到&#xff0c;使用Express框架搭建起了简易的后端&#xff0c;并可以使用它接受各种形式的参数。 这一节&#xff0c;我们来解决一个web开发中非常基础但也是非常重要的需求——文件上传与下载问题 文件上传 上传一个文件&#xff0c;使用的http的请求方法是post&…...

    2024/4/27 23:09:01

最新文章

  1. 可视化大屏在真实场景的效果,绝对震撼,不要再嘲笑其作用了

    hello&#xff0c;我是大千UI工场&#xff0c;本地带来一批可视化大屏现场效果图&#xff0c;非常震撼&#xff0c;给大家带来身临其境的感受&#xff0c;欢迎关注点赞&#xff0c;有需求请私信。 有人可能会认为可视化大屏没有太多价值&#xff0c;可能是因为以下几个原因&am…...

    2024/5/1 21:01:28
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Vue通过自定义指令实现元素平滑上升的动画效果(可以自定义动画时间、动画效果、动画速度等等)。

    1、演示 2、介绍 这个指令不是原生自带的&#xff0c;需要手动去书写&#xff0c;但是这辈子只需要编写这一次就好了&#xff0c;后边可以反复利用。 3、关键API IntersectionObserver IntersectionObserver 是一个用于监测元素是否进入或离开视口&#xff08;viewport&#x…...

    2024/4/30 3:06:26
  4. Vue3学习笔记+报错记录

    文章目录 1.创建Vue3.0工程1.1使用vue-cli创建1.2 使用vite创建工程1.3.分析Vue3工程结构 2.常用Composition2.1 拉开序幕的setup2.2 ref函数_处理基本类型2.3 ref函数_处理对象类型2.4 ref函数使用总结 1.创建Vue3.0工程 1.1使用vue-cli创建 查看vue/cli版本&#xff0c;确保…...

    2024/4/30 17:15:04
  5. 【物联网项目】基于ESP8266的家庭灯光与火情智能监测系统——文末完整工程资料源码

    目录 系统介绍 硬件配置 硬件连接图 系统分析与总体设计 系统硬件设计 ESP8266 WIFI开发板 人体红外传感器模块 光敏电阻传感器模块 火焰传感器模块 可燃气体传感器模块 温湿度传感器模块 OLED显示屏模块 系统软件设计 温湿度检测模块 报警模块 OLED显示模块 …...

    2024/5/1 14:49:10
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57