super-test 1.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/CHANGE.txt +9 -0
- data/README.txt +13 -0
- data/bin/idb +19 -0
- data/bin/ii +113 -0
- data/bin/istart_mock +36 -0
- data/bin/istop_mock +16 -0
- data/bin/kk +181 -0
- data/bin/rubyatp +42 -0
- data/bin/start_mock +36 -0
- data/bin/stop_mock +16 -0
- data/bin/xgo +45 -0
- data/conf/conf.rb +11 -0
- data/conf/db03.yml +31 -0
- data/conf/db13.yml +37 -0
- data/conf/db19.yml +33 -0
- data/conf/online.yml +32 -0
- data/conf/super_test.yml +40 -0
- data/conf/system.yml +26 -0
- data/conf/sz00.yml +31 -0
- data/conf/sz06.yml +34 -0
- data/conf/wise00.yml +11 -0
- data/data/case.house +0 -0
- data/data/char.house +0 -0
- data/data/images/Bluehills.jpg +0 -0
- data/data/images/Sunset.jpg +0 -0
- data/data/images/Waterlilies.jpg +0 -0
- data/data/images/Winter.jpg +0 -0
- data/data/query.house +18595 -0
- data/data/user.house +8 -0
- data/lib/action/module/check_action.rb +58 -0
- data/lib/action/module/cnnt_action.rb +161 -0
- data/lib/action/module/datacenter_action.rb +48 -0
- data/lib/action/module/http_pack_helper.rb +163 -0
- data/lib/action/module/httpserver_action.rb +297 -0
- data/lib/action/module/inc.rb +21 -0
- data/lib/action/module/mcpack_action.rb +57 -0
- data/lib/action/module/sql_action.rb +84 -0
- data/lib/action/module/ssh_action.rb +37 -0
- data/lib/action/system/user_action.rb +180 -0
- data/lib/common/appium_helper.rb +217 -0
- data/lib/common/atp_helper.rb +74 -0
- data/lib/common/atp_report.rb +344 -0
- data/lib/common/data_house.rb +405 -0
- data/lib/common/data_model.rb +87 -0
- data/lib/common/http/assert_helper.rb +343 -0
- data/lib/common/http/fix_hpricot.rb +118 -0
- data/lib/common/http/html_helper.rb +362 -0
- data/lib/common/http/http_helper.rb +469 -0
- data/lib/common/http/multipart.rb +81 -0
- data/lib/common/isandbox_helper.rb +195 -0
- data/lib/common/json_helper.rb +43 -0
- data/lib/common/mock_helper.rb +168 -0
- data/lib/common/mtop_helper.rb +141 -0
- data/lib/common/myconf_helper.rb +49 -0
- data/lib/common/mylog_helper.rb +77 -0
- data/lib/common/pairwise.rb +121 -0
- data/lib/common/query_house.rb +89 -0
- data/lib/common/report_helper.rb +97 -0
- data/lib/common/robot_helper.rb +85 -0
- data/lib/common/socket/check.rb +325 -0
- data/lib/common/socket/conf_modifier.rb +149 -0
- data/lib/common/socket/context.rb +55 -0
- data/lib/common/socket/data.rb +392 -0
- data/lib/common/socket/data_helper.rb +41 -0
- data/lib/common/socket/env.rb +317 -0
- data/lib/common/socket/inc.rb +24 -0
- data/lib/common/socket/log.rb +213 -0
- data/lib/common/socket/log4s.rb +58 -0
- data/lib/common/socket/log_helper.rb +332 -0
- data/lib/common/socket/my_sql.rb +77 -0
- data/lib/common/socket/net.rb +74 -0
- data/lib/common/socket/network.rb +115 -0
- data/lib/common/socket/rlib/conf_modifier.rb +130 -0
- data/lib/common/socket/rlib/data_helper.rb +33 -0
- data/lib/common/socket/rlib/log_helper.rb +303 -0
- data/lib/common/socket/rlib/process_helper.rb +91 -0
- data/lib/common/socket/stub.rb +276 -0
- data/lib/common/socket/util.rb +266 -0
- data/lib/patterns/inc.rb +10 -0
- data/lib/patterns/mc_base_pattern.rb +474 -0
- data/lib/patterns/some_pattern.rb +145 -0
- data/lib/super_test.rb +114 -0
- data/log/super_test.log +0 -0
- data/log/super_test.log.wf +0 -0
- data/test/cover_me.rb +6 -0
- data/tool/jenny +0 -0
- data/tool/mcsend/mcsend2 +0 -0
- data/tool/mcsend/mcsend2_shead +0 -0
- data/tool/mcserver/conf/mcserver.conf +77 -0
- data/tool/mcserver/conf/mcserverauthip +17 -0
- data/tool/mcserver/mcserver +0 -0
- data/tool/mcserver/mcserver_trans +0 -0
- data/tool/mysql +0 -0
- data/tool/net/mcsend/mcsend +0 -0
- data/tool/net/mcsend/mcsend_trans +0 -0
- data/tool/net/mcsend/nshead.data +7 -0
- data/tool/net/mcsend/res_nshead.data +7 -0
- data/tool/net/my_client/my_client +0 -0
- data/tool/net/tsclient/client.tcl +205 -0
- data/tool/others/kk +190 -0
- data/tool/others/rubyatp +42 -0
- data/tool/others/supertest_install.sh +34 -0
- data/tool/trip/idb +0 -0
- data/tool/ts-agent/nshead.bft +12 -0
- data/tool/ts-agent/server.conf +10 -0
- data/tool/ts-agent/server.tcl +376 -0
- metadata +275 -0
@@ -0,0 +1,141 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: yzm
|
5
|
+
# Date:: 2016-03-16 10:54:56 +0800
|
6
|
+
###########################################
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
# 实现mtop请求的核心模块
|
11
|
+
require 'common/http/http_helper'
|
12
|
+
require 'common/json_helper'
|
13
|
+
|
14
|
+
module MtopHelper
|
15
|
+
|
16
|
+
# === 功能:
|
17
|
+
# 发起mtop请求,请求方式为get
|
18
|
+
# === 参数解释:
|
19
|
+
# - opts{:api_name => 'api名称', :api_version => '版本', :api_data => '数据', :env_type => 'waptest'/'wapa'/'m'}
|
20
|
+
#
|
21
|
+
#
|
22
|
+
# === Example:
|
23
|
+
# Example #1:
|
24
|
+
#
|
25
|
+
# opts = {
|
26
|
+
# :api_name => 'mtop.trip.hotel.hotelSearch',
|
27
|
+
# :api_version => '1.0',
|
28
|
+
# :api_data => '{"cityCode":"110100","checkIn":"2016-03-20","checkOut":"2016-03-21","radius":"-1","order":"0","dir":"0","pageNo":"1","pageSize":"20","offset":"-1","sellerId":"-1","isKeZhan":"0","priceMin":"0","priceMax":"-1","labels":"0","isSug":"0","isB2G":"0","isNeedSelectData":"0","filterByPayment":"0","isDisplayMultiRate":"0","useTemplate":"0","filterLaterPay":"0","isIncludePayLater":"1"}',
|
29
|
+
# :env_type => 'waptest'
|
30
|
+
# }
|
31
|
+
#
|
32
|
+
# mtop_get opts
|
33
|
+
#
|
34
|
+
def mtop_get(opts={})
|
35
|
+
operator = MtopV4.new opts
|
36
|
+
operator.to_get
|
37
|
+
operator.request
|
38
|
+
end
|
39
|
+
|
40
|
+
# === 功能:
|
41
|
+
# 发起mtop请求,请求方式为post
|
42
|
+
# === 参数解释:
|
43
|
+
# - opts{:api_name => 'api名称', :api_version => '版本', :api_data => '数据', :env_type => 'waptest'/'wapa'/'m'}
|
44
|
+
#
|
45
|
+
#
|
46
|
+
# === Example:
|
47
|
+
# Example #1:
|
48
|
+
# opts = {
|
49
|
+
# :api_name => 'mtop.trip.hotel.hotelSearch',
|
50
|
+
# :api_version => '1.0',
|
51
|
+
# :api_data => '{"cityCode":"110100","checkIn":"2016-03-20","checkOut":"2016-03-21","radius":"-1","order":"0","dir":"0","pageNo":"1","pageSize":"20","offset":"-1","sellerId":"-1","isKeZhan":"0","priceMin":"0","priceMax":"-1","labels":"0","isSug":"0","isB2G":"0","isNeedSelectData":"0","filterByPayment":"0","isDisplayMultiRate":"0","useTemplate":"0","filterLaterPay":"0","isIncludePayLater":"1"}',
|
52
|
+
# :env_type => 'waptest'
|
53
|
+
# }
|
54
|
+
# mtop_post opts
|
55
|
+
#
|
56
|
+
def mtop_post(opts={})
|
57
|
+
operator = MtopV4.new opts
|
58
|
+
operator.to_post
|
59
|
+
operator.request
|
60
|
+
end
|
61
|
+
|
62
|
+
class MtopV4
|
63
|
+
include HttpHelper
|
64
|
+
include JsonHelper
|
65
|
+
def initialize(opts = {})
|
66
|
+
|
67
|
+
|
68
|
+
mtop_info = parse_json(get('http://qacenter.alitrip.net/tools/GetMtopInfoAction.do'))
|
69
|
+
fail 'GetMtopInfo Fail' if mtop_info['success'] != true
|
70
|
+
|
71
|
+
@@MTOP_CONFIG = mtop_info['data']
|
72
|
+
|
73
|
+
if opts.is_a? Hash
|
74
|
+
opts = MtopV4.symbolize_keys opts
|
75
|
+
@api_name = opts[:api_name] || nil
|
76
|
+
@api_version = opts[:api_version] || '*'
|
77
|
+
@api_data = opts[:api_data] || {}
|
78
|
+
@env_type = opts[:env_type] || 'wapa'
|
79
|
+
@ecode_need = opts[:ecode_need] || false
|
80
|
+
@user_data = opts[:user_data] || nil
|
81
|
+
@http_method = opts[:http_method] || 'POST'
|
82
|
+
|
83
|
+
@base_url = @@MTOP_CONFIG[@env_type]['url']
|
84
|
+
@app_key = @@MTOP_CONFIG[@env_type]['app_key']
|
85
|
+
@app_secret = @@MTOP_CONFIG[@env_type]['app_secret']
|
86
|
+
|
87
|
+
@ttid = @@MTOP_CONFIG['ttid']
|
88
|
+
@devid = @@MTOP_CONFIG['devid']
|
89
|
+
@req_header = {
|
90
|
+
'm-t' => Time.now.to_i.to_s,
|
91
|
+
'm-appkey' => @app_key,
|
92
|
+
'm-ttid' => @ttid,
|
93
|
+
'm-pv' => '3.0',
|
94
|
+
'm-devid' => @devid
|
95
|
+
}
|
96
|
+
@cookies = {}
|
97
|
+
end
|
98
|
+
end
|
99
|
+
def to_post
|
100
|
+
@http_method = 'POST'
|
101
|
+
end
|
102
|
+
def to_get
|
103
|
+
@http_method = 'GET'
|
104
|
+
end
|
105
|
+
def update(opts={})
|
106
|
+
opts = MtopV4.symbolize_keys opts
|
107
|
+
@api_name = opts[:api_name] || nil
|
108
|
+
@api_version = opts[:api_version] || '*'
|
109
|
+
@api_data = opts[:api_data] || {}
|
110
|
+
@env_type = opts[:env_type] || 'waptest'
|
111
|
+
@http_method = opts[:http_method] || 'GET'
|
112
|
+
end
|
113
|
+
def request
|
114
|
+
@req_header.store 'm-sign', sign()
|
115
|
+
if @http_method === 'GET'
|
116
|
+
@url = "http://#{@base_url}/gw/#{@api_name}/#{@api_version}/?data=#{@api_data.to_s}&type=originaljson"
|
117
|
+
get @url, parse_json(@api_data), @req_header
|
118
|
+
elsif @http_method === 'POST'
|
119
|
+
@url = "http://#{@base_url}/gw/#{@api_name}/#{@api_version}/"
|
120
|
+
data = {"data" => @api_data};
|
121
|
+
post @url, data, @req_header, {}
|
122
|
+
end
|
123
|
+
parse_json @response.body
|
124
|
+
end
|
125
|
+
|
126
|
+
def sign
|
127
|
+
OpenSSL::HMAC.hexdigest('sha1', @app_secret.to_s, ['', @app_key, @api_data.to_s, @req_header['m-t'], @api_name, @api_version, '', @ttid, @devid, '', ''].join('&').to_s)
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.symbolize_keys(hash)
|
131
|
+
fail 'symbolize_keys requires a hash' unless hash.is_a? Hash
|
132
|
+
result = {}
|
133
|
+
hash.each do |key, value|
|
134
|
+
key = key.to_sym rescue key # rubocop:disable Style/RescueModifier
|
135
|
+
result[key] = value.is_a?(Hash) ? symbolize_keys(value) : value
|
136
|
+
end
|
137
|
+
result
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: hanyu
|
5
|
+
# Date:: 2009.5.7
|
6
|
+
|
7
|
+
|
8
|
+
require 'yaml'
|
9
|
+
|
10
|
+
# 读取配置,配置文件以YAML的格式进行存储
|
11
|
+
#
|
12
|
+
# 提供环境切换机制,如下
|
13
|
+
#
|
14
|
+
# #读取sz00.yml
|
15
|
+
# env: sz00
|
16
|
+
module ConfigHelper
|
17
|
+
# 全局的配置
|
18
|
+
if File.exist? "#{$WORK_ROOT}/conf/super_test.yml"
|
19
|
+
CONF = YAML.load_file "#{$WORK_ROOT}/conf/super_test.yml"
|
20
|
+
$log.debug "load [#{$WORK_ROOT}/conf/super_test.yml] success!"
|
21
|
+
elsif File.exist? "#{$SUPER_ROOT}/conf/super_test.yml"
|
22
|
+
CONF = YAML.load_file "#{$SUPER_ROOT}/conf/super_test.yml"
|
23
|
+
$log.debug "load [#{$SUPER_ROOT}/conf/super_test.yml] success!"
|
24
|
+
else
|
25
|
+
raise "[conf/super_test.yml] is not exist!"
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
$log.debug "load super_test.yml success"
|
30
|
+
CONF['env'] = ENV['SUPER_ENV'] unless ENV['SUPER_ENV'].nil?
|
31
|
+
if File.exist? "#{$WORK_ROOT}/conf/#{CONF['env']}.yml"
|
32
|
+
# 环境相关的配置
|
33
|
+
ENV = ENV.to_hash.merge YAML.load_file("#{$WORK_ROOT}/conf/#{CONF['env']}.yml")
|
34
|
+
$log.debug "load [#{$WORK_ROOT}/conf/#{CONF['env']}.yml] success!"
|
35
|
+
elsif File.exist? "#{$SUPER_ROOT}/conf/#{CONF['env']}.yml"
|
36
|
+
# 环境相关的配置
|
37
|
+
ENV = ENV.to_hash.merge YAML.load_file("#{$SUPER_ROOT}/conf/#{CONF['env']}.yml")
|
38
|
+
$log.debug "load [#{$SUPER_ROOT}/conf/#{CONF['env']}.yml] success!"
|
39
|
+
else
|
40
|
+
raise "env[#{CONF['env']}.yml] is not exist!"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
if __FILE__ == $0
|
46
|
+
puts ConfigHelper::CONF
|
47
|
+
puts ConfigHelper::ENV
|
48
|
+
end
|
49
|
+
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: hanyu
|
5
|
+
# Date:: 2009.5.7
|
6
|
+
|
7
|
+
# SHOULD gem install log4r
|
8
|
+
require 'log4r'
|
9
|
+
|
10
|
+
|
11
|
+
# 日志打印
|
12
|
+
#
|
13
|
+
# === Example
|
14
|
+
# require 'log_helper'
|
15
|
+
#
|
16
|
+
# $log.info "o了"
|
17
|
+
module MylogHelper
|
18
|
+
include Log4r
|
19
|
+
|
20
|
+
#第一步,配置log
|
21
|
+
log = Logger.new "mylog"
|
22
|
+
f = PatternFormatter.new(:pattern => "%5l %d %m")
|
23
|
+
file = FileOutputter.new('fileOutputter', :filename => "#{$WORK_ROOT}/log/super_test.log",:trunc => false)
|
24
|
+
file.only_at DEBUG,INFO
|
25
|
+
file.formatter = f
|
26
|
+
log.add file
|
27
|
+
|
28
|
+
file_wf = FileOutputter.new('fileOutputter', :filename => "#{$WORK_ROOT}/log/super_test.log.wf",:trunc => false)
|
29
|
+
file_wf.only_at WARN,ERROR,FATAL
|
30
|
+
file_wf.formatter = f
|
31
|
+
log.add file_wf
|
32
|
+
$log = log
|
33
|
+
|
34
|
+
# 设置日志等级
|
35
|
+
#
|
36
|
+
# 可用等级:debug/info/warn/error/fatal
|
37
|
+
#
|
38
|
+
# Example:
|
39
|
+
#
|
40
|
+
# require 'log_helper'
|
41
|
+
#
|
42
|
+
# Loghelper::set_level "warn"
|
43
|
+
#
|
44
|
+
# $log.debug "test deb"
|
45
|
+
# $log.info "test info"
|
46
|
+
#
|
47
|
+
# #上面的日志不会打印,下面的信息才会打印
|
48
|
+
#
|
49
|
+
# $log.warn "test warn"
|
50
|
+
# $log.error "test error"
|
51
|
+
# $log.fatal "test fatal"
|
52
|
+
def self.set_level(level)
|
53
|
+
case level.downcase
|
54
|
+
when "debug"
|
55
|
+
$log.level = DEBUG
|
56
|
+
when "info"
|
57
|
+
$log.level = INFO
|
58
|
+
when "warn"
|
59
|
+
$log.level = WARN
|
60
|
+
when "error"
|
61
|
+
$log.level = ERROR
|
62
|
+
when "fatal"
|
63
|
+
$log.level = FATAL
|
64
|
+
else
|
65
|
+
raise "bad log level"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
if __FILE__ == $0
|
71
|
+
Myloghelper::set_level "debug"
|
72
|
+
$log.debug "test deb"
|
73
|
+
$log.info "test info"
|
74
|
+
$log.warn "test warn"
|
75
|
+
$log.error "test error"
|
76
|
+
$log.fatal "test fatal"
|
77
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: hanyu
|
5
|
+
# Date:: 2009.9.12
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
# Pairwise (a.k.a. all-pairs) testing is an effective test case generation technique that
|
10
|
+
# is based on the observation that most faults are caused by interactions of at most two factors.
|
11
|
+
# Pairwise-generated test suites cover all combinations of two therefore are much
|
12
|
+
# smaller than exhaustive ones yet still very effective in finding defects.
|
13
|
+
#
|
14
|
+
#
|
15
|
+
# Based on jenny, http://burtleburtle.net/bob/math/jenny.html
|
16
|
+
# Thanks Bob Jenkins :)
|
17
|
+
#
|
18
|
+
module Pairwise
|
19
|
+
|
20
|
+
# 给定几个数组,按照pairwise算法,从中挑出最小的case集
|
21
|
+
# 借助jenny实现pairwise
|
22
|
+
def self.jenny(*arrs)
|
23
|
+
raise "the number of arguments must > 1" unless arrs.size > 1
|
24
|
+
cmd = "jenny -n2"
|
25
|
+
arrs.each do |arr|
|
26
|
+
raise "argument[#{arr}] must be an Array!" unless arr.is_a?(Array)
|
27
|
+
raise "Array[#{arr}]'s size[#{arr.size}] must between in [2,51]" unless arr.size>1 and arr.size<52
|
28
|
+
cmd << " #{arr.size}"
|
29
|
+
end
|
30
|
+
|
31
|
+
# 如果包含排除的组合列表
|
32
|
+
if block_given?
|
33
|
+
#TODO
|
34
|
+
end
|
35
|
+
|
36
|
+
# 开始执行jenny,并获取返回数据
|
37
|
+
#p "cmd:#{cmd}"
|
38
|
+
result = `#{cmd}`
|
39
|
+
pair = []
|
40
|
+
result.each_line do |line|
|
41
|
+
line.strip!
|
42
|
+
la = []
|
43
|
+
index = 0
|
44
|
+
line.split(" ").each do |str|
|
45
|
+
if str[1].ord >= 97 and str[1].ord <=122
|
46
|
+
la << arrs[index][str[1].ord-97]
|
47
|
+
elsif str[1].ord >= 65 and str[1].ord <= 90
|
48
|
+
la << arrs[index][str[1].ord-65+26]
|
49
|
+
else
|
50
|
+
raise "why you got this str[#{str}] ?"
|
51
|
+
end
|
52
|
+
index = index + 1
|
53
|
+
end
|
54
|
+
pair << la
|
55
|
+
end
|
56
|
+
return pair
|
57
|
+
end
|
58
|
+
|
59
|
+
# === 功能:
|
60
|
+
# 给定几个数组,按照pairwise算法,从中挑出最小的case集
|
61
|
+
#
|
62
|
+
# === 参数解释:
|
63
|
+
# - *arrs 可以跟若干个数组参数
|
64
|
+
#
|
65
|
+
# === Example:
|
66
|
+
# Example #1:
|
67
|
+
#
|
68
|
+
# type_arr = %w{Primary Logical Single Span Stripe Mirror}
|
69
|
+
# size_arr = %w{10 100 500 5000 10000 40000}
|
70
|
+
# system_arr = %w{FAT FAT32 NTFS}
|
71
|
+
# compression_arr = %w{on off}
|
72
|
+
#
|
73
|
+
# pair = Pairwise.gen(type_arr,size_arr,system_arr,compression_arr)
|
74
|
+
#
|
75
|
+
# puts pair.size #=> 36
|
76
|
+
# p pair #=> [["Primary", "5000", "NTFS", "off"], ...]
|
77
|
+
#
|
78
|
+
# pair.each do |type,size,system,compression| #=> 可以遍历
|
79
|
+
# puts type,size,system,compression
|
80
|
+
# end
|
81
|
+
#
|
82
|
+
def self.gen(*arrs)
|
83
|
+
jenny(*arrs)
|
84
|
+
end
|
85
|
+
|
86
|
+
# 与gen一样
|
87
|
+
def self.generate(*arrs)
|
88
|
+
jenny(*arrs)
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
if __FILE__ == $0
|
96
|
+
NAMES = %w{aa fd fef}
|
97
|
+
PASSS = %w{1234 34 456 546 678 123 345 654 7653 2345 2345 54 345 43 123 765 76 76 87654 2345 54 9 78 56 34 3 456 765 76 76 876 23 4 56 546 56 5456 545 46 78 9 09 87 65 6 67 9 8 7654 32 34235 678 98 7 6543 2 34 567 8 6 5432 34 567 8 654 3 3 45 67 54 3 45}
|
98
|
+
|
99
|
+
class MyTest
|
100
|
+
|
101
|
+
def test2
|
102
|
+
ENV['PATH'] = ENV['PATH'] + ":#{ENV['HOME']}/app-test/search/space/super-test/tool"
|
103
|
+
re = (Pairwise.jenny NAMES, PASSS, [1,2,3,4,5],[Object.new,Object.new])
|
104
|
+
p re
|
105
|
+
p re.size
|
106
|
+
end
|
107
|
+
|
108
|
+
def test1
|
109
|
+
ENV['PATH'] = ENV['PATH'] + ":#{ENV['HOME']}/app-test/search/space/super-test/tool"
|
110
|
+
type_arr = %w{Primary Logical Single Span Stripe Mirror}
|
111
|
+
size_arr = %w{10 100 500 5000 10000 40000}
|
112
|
+
system_arr = %w{FAT FAT32 NTFS}
|
113
|
+
compression_arr = %w{on off}
|
114
|
+
pair = Pairwise.jenny(type_arr,size_arr,system_arr,compression_arr)
|
115
|
+
puts pair.size
|
116
|
+
p pair
|
117
|
+
end
|
118
|
+
end
|
119
|
+
MyTest.new.test1
|
120
|
+
end
|
121
|
+
|
@@ -0,0 +1,89 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# coding: utf-8
|
3
|
+
#
|
4
|
+
# Author:: hanyu
|
5
|
+
# Date:: 2009.9.4
|
6
|
+
|
7
|
+
|
8
|
+
# QueryHouse 以线上50w+的真实query集为基础,随机选出N条数据,
|
9
|
+
# 50w 是目前的数据量,欢迎对这个数据进行增加、删除、修改、优化,
|
10
|
+
# QueryHouse 支持随机读数据文件,所以不用担心数据量太大对程序照成性能或资源上的影响 :)
|
11
|
+
# QueryHouse 是一个单例类,使用时可以直接调用其静态方法
|
12
|
+
#
|
13
|
+
class QueryHouse
|
14
|
+
|
15
|
+
private_class_method :new
|
16
|
+
@@instance = nil
|
17
|
+
def self.get_instance
|
18
|
+
@@instance = new("#{$SUPER_ROOT}/data/query.house") unless @@instance
|
19
|
+
@@instance
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize query_file
|
23
|
+
raise "query.house[#{query_file}] not exist!" unless File.file? query_file
|
24
|
+
@query_file = File.new query_file, "r"
|
25
|
+
@byte_size = File.size @query_file
|
26
|
+
#@size = @query_file.read.count "\n"
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
# === 功能:
|
31
|
+
# 随机取得一个query,一般情况请使用get_query静态方法
|
32
|
+
#
|
33
|
+
# === 参数解释:
|
34
|
+
# - return 返回一个随机query,String类型,
|
35
|
+
# - raise 如果失败就抛异常
|
36
|
+
#
|
37
|
+
# === Example:
|
38
|
+
# qs = QueryHouse.get_instance
|
39
|
+
# p qs.get_a_rand_query #=> "gp超霸电池"
|
40
|
+
#
|
41
|
+
def get_a_rand_query
|
42
|
+
# 最多尝试3次
|
43
|
+
3.times do
|
44
|
+
@query_file.seek rand(@byte_size)
|
45
|
+
# 跳过seek所在的一行
|
46
|
+
@query_file.gets
|
47
|
+
line = @query_file.gets
|
48
|
+
return line.rstrip.force_encoding("gbk") unless line.nil?
|
49
|
+
end
|
50
|
+
raise "Sorry! I can't get any query from file[#{@query_file}]"
|
51
|
+
end
|
52
|
+
|
53
|
+
# === 功能:
|
54
|
+
# 随机取得n个query,静态方法哦!!!
|
55
|
+
#
|
56
|
+
# === 参数解释:
|
57
|
+
# - n query数量,默认为1
|
58
|
+
# - return query的数组
|
59
|
+
# - raise 如果失败就抛异常
|
60
|
+
#
|
61
|
+
# === Example:
|
62
|
+
# p QueryHouse.get_n_query 3 #=> ["gp超霸电池","乔四爷的坑(4)","经典励志格言"]
|
63
|
+
#
|
64
|
+
def self.get_n_query n=1
|
65
|
+
instance = get_instance
|
66
|
+
arr = []
|
67
|
+
n.times do
|
68
|
+
arr << instance.get_a_rand_query
|
69
|
+
end
|
70
|
+
return arr
|
71
|
+
end
|
72
|
+
|
73
|
+
# === 功能:
|
74
|
+
# 随机取得一个query,静态方法哦!!!
|
75
|
+
#
|
76
|
+
# === 参数解释:
|
77
|
+
# - return 一个query,String类型
|
78
|
+
# - raise 如果失败就抛异常
|
79
|
+
#
|
80
|
+
# === Example:
|
81
|
+
# p QueryHouse.get_a_query #=> "gp超霸电池"
|
82
|
+
#
|
83
|
+
def self.get_a_query
|
84
|
+
get_instance.get_a_rand_query
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|