Appium总结(三):Rspec使用初步用法

来源:互联网 发布:手机散热软件 编辑:程序博客网 时间:2024/06/02 06:06

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span>

测试一个很重要的方面就是Assertion啦,这里我采用的是Ruby on Rails中的一个测试框架:Rspec;             
                                                                                                              
 Rspec不需要单独安装Rails(奇葩啊),在mac上如果安装了rubygems的话只需要一句命令就能安装Rspec:gem install rspec,之后它会自动把相关的gem安装完成,包括rspec_expectations和rspec_core;这里推荐一篇rspec的入门级博客:http://www.jianshu.com/p/1db9ee327357
rspec的功能比较丰富,下面是一个测试例子,在我的mac根目录下我新建了一个work的目录,在该目录下面我新建了一个work_spec.rb文件和一个lib目录。
work_spec文件,顾名思义,就是我们的测试脚本;
lib目录,顾名思义,就是我们需要用到的类文件存放的目录,这里我用到了一个Work类,文件内容如下:
<pre name="code" class="ruby">class Work    attr:accessor :work_place    def hard?#累吗?true    endend

而work_spec文件代码如下:
require 'work' #Work类文件的文件名conetxt'Is programmer need to work hard?' do    it 'let's get result from Jayson' do          expect(Work.new.hard?).to eq(false)    endend


context xxx do表示的是测试用例组,it xxx do表示的是测试用例,测试用例组可以嵌套,一个用例组可以运行多个测试用例。
describe do和context do的作用类似,但是两者的区别在于describe do侧重于描述测试对象而context do侧重于描述测试的注释文本;
require 'work' #Work类文件的文件名describe Work do    it 'lets get result from Jayson' do        expect(Work.new.hard?).to eq(false)    end    it 'lets get result from Nicole' do        expect(Work.new.hard?).to eq(false)    end    it 'lets get result from Vain' do        expect(Work.new.hard?).to eq(false)    end    it 'lets get result from Felix' do        expect(Work.new.hard?).to eq(false)    endend


我们可以进一步扩充测试用例,然后会得到4个错误,因为hard?方法返回的永远都是true,而我期待的是false,所以测试就会因为出现错误而中断;
另外,可以发现我创建了4个Work对象,这是不必要的,我可以进行提取的操作:

require 'work' #Work类文件的文件名describe Work do    @work    before do         @work = Work.new    end    it 'lets get result from Jayson' do        expect(@work.hard?).to eq(false)    end    it 'lets get result from Nicole' do        expect(@work.hard?).to eq(false)    end    it 'lets get result from Vain' do        expect(@work.hard?).to eq(false)    end    it 'lets get result from Felix' do        expect(@work.hard?).to eq(false)    endend
before xx do一般用于变量的初始化操作,和它对应的是after do;在before do的代码中可以添加:each和:all参数(   before(:each)  do  ),表示所有的it do测试用例之前都得先执行before do中的代码块,执行完后再执行after do中的代码块;

和before do类似的方法为let do方法,但是let do方法一般不会进行变量的初始化操作;

下面我们可以进一步扩充Work类中的方法:

class Work    attr:accessor :work_place    def hard?#累吗?true    end    def workIn(place)        work_place = place    endend

每一个人,在测试前都需要指出自己工作的地点,这是大家共有的行为特点,所以我们可以进行抽象:

<pre name="code" class="ruby">require 'work' #Work类文件的文件名<strong>shared_examples_for 'workIn' do</strong>    it "should give us work place" do@work.workIn "杏仁"    endenddescribe Work do    <strong>it_behaves_like 'workIn'</strong>     @work    before do         @work = Work.new           end    it 'lets get result from Jayson' do                expect(@work.hard?).to eq(false)    end    it 'lets get result from Nicole' do        expect(@work.hard?).to eq(false)    end    it 'lets get result from Vain' do        expect(@work.hard?).to eq(false)    end    it 'lets get result from Felix' do        expect(@work.hard?).to eq(false)    endend
context 'test shared_examples_do' do
   <strong> <span style="font-family: Arial, Helvetica, sans-serif;">it_behaves_like 'workIn'</span></strong>    it 'haha' do
    endend


shared_examples_for方法可以为describe do或者context do这种域配置公共方法,但是一定不能配置在before\let\it这些域中。

最后是pending()方法:

      我们确定系统拥有一个行为,但是还没有具体定义,这时我们可以将该行为使用pending()方法来设置该行为为待定义,其后的字符串参数将在生成的报告中显示。
      pending()方法的另外一种用法就是,当一个测试用例失败时,我们可以利用pending方法设置其为一个待修复的bug,方法体内包含使用例失败的代码。例如最后一个测试用例的内容


至此,本文当完~

下章:Appium移动测试的基本操作


0 0