magnesium 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +52 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/magnesium.rb +62 -0
- data/lib/magnesium/config.xml +16 -0
- data/lib/magnesium/elements/alert.rb +134 -0
- data/lib/magnesium/elements/browser.rb +29 -0
- data/lib/magnesium/elements/button.rb +104 -0
- data/lib/magnesium/elements/checkbox.rb +103 -0
- data/lib/magnesium/elements/div.rb +120 -0
- data/lib/magnesium/elements/frame.rb +121 -0
- data/lib/magnesium/elements/link.rb +105 -0
- data/lib/magnesium/elements/radio.rb +103 -0
- data/lib/magnesium/elements/select_list.rb +103 -0
- data/lib/magnesium/elements/span.rb +116 -0
- data/lib/magnesium/elements/table.rb +121 -0
- data/lib/magnesium/elements/text.rb +109 -0
- data/lib/magnesium/elements/text_field.rb +109 -0
- data/lib/magnesium/extensions/assert.rb +2 -0
- data/lib/magnesium/extensions/feedback.rb +25 -0
- data/lib/magnesium/extensions/http.rb +48 -0
- data/lib/magnesium/extensions/mail.rb +26 -0
- data/lib/magnesium/extensions/scheduler.rb +32 -0
- data/lib/magnesium/extensions/ssh.rb +53 -0
- data/lib/magnesium/extensions/webservice.rb +0 -0
- data/lib/magnesium/factor/test_case.rb +124 -0
- data/lib/magnesium/factor/test_data.rb +32 -0
- data/lib/magnesium/factor/test_result.rb +84 -0
- data/lib/magnesium/factor/test_site.rb +23 -0
- data/lib/magnesium/factor/test_step.rb +31 -0
- data/lib/magnesium/factor/test_ui.rb +55 -0
- data/lib/magnesium/support/config.rb +361 -0
- data/lib/magnesium/support/container.rb +18 -0
- data/lib/magnesium/support/data.rb +11 -0
- data/lib/magnesium/support/error.rb +16 -0
- data/lib/magnesium/support/factory.rb +43 -0
- data/lib/magnesium/support/log.rb +3 -0
- data/lib/magnesium/support/testlink.rb +270 -0
- data/lib/magnesium/support/xml.rb +73 -0
- data/lib/magnesium/version.rb +3 -0
- data/magnesium.gemspec +24 -0
- data/spec/runspec.rb +0 -0
- data/template.yml +57 -0
- metadata +134 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
#
|
4
|
+
#store web info
|
5
|
+
#
|
6
|
+
module Magnesium
|
7
|
+
class Container
|
8
|
+
|
9
|
+
attr_accessor :hash_locate
|
10
|
+
attr_accessor :hash_action
|
11
|
+
attr_accessor :hash_value
|
12
|
+
attr_accessor :hash_element
|
13
|
+
attr_accessor :container_mark
|
14
|
+
attr_accessor :hash_box
|
15
|
+
attr_accessor :container_type
|
16
|
+
attr_accessor :container_title
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Magnesium
|
2
|
+
class Show
|
3
|
+
def initialize()
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.nonfun
|
7
|
+
puts 'M: I need time to grow up.'
|
8
|
+
puts 'M: Please try another way.'
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.error
|
12
|
+
puts 'M: I am sorry about error.'
|
13
|
+
puts 'M: Please try again.'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path("../../elements/text_field",__FILE__)
|
2
|
+
require File.expand_path("../../elements/button",__FILE__)
|
3
|
+
require File.expand_path("../../elements/link",__FILE__)
|
4
|
+
require File.expand_path("../../elements/select_list",__FILE__)
|
5
|
+
require File.expand_path("../../elements/radio",__FILE__)
|
6
|
+
require File.expand_path("../../elements/checkbox",__FILE__)
|
7
|
+
require File.expand_path("../../elements/alert",__FILE__)
|
8
|
+
require File.expand_path("../../elements/frame",__FILE__)
|
9
|
+
require File.expand_path("../../elements/span",__FILE__)
|
10
|
+
require File.expand_path("../../elements/div",__FILE__)
|
11
|
+
require File.expand_path("../../elements/table",__FILE__)
|
12
|
+
|
13
|
+
|
14
|
+
#
|
15
|
+
#generate element
|
16
|
+
#
|
17
|
+
module Magnesium
|
18
|
+
class Factory
|
19
|
+
def self.creator(element)
|
20
|
+
if element == 'textField'
|
21
|
+
return TextField.new
|
22
|
+
elsif element == 'button'
|
23
|
+
return Button.new
|
24
|
+
elsif element == 'link'
|
25
|
+
return Link.new
|
26
|
+
elsif element == 'selectList'
|
27
|
+
return SelectList.new
|
28
|
+
elsif element == 'radio'
|
29
|
+
return Radio.new
|
30
|
+
elsif element == 'checkBox'
|
31
|
+
return CheckBox.new
|
32
|
+
elsif element == 'frame'
|
33
|
+
return Frame.new
|
34
|
+
elsif element == 'div'
|
35
|
+
return Div.new
|
36
|
+
elsif element == 'span'
|
37
|
+
return Span.new
|
38
|
+
elsif element == 'table'
|
39
|
+
return Table.new
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,270 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'mysql2'
|
3
|
+
#require File.expand_path("../../fun/mysql",__FILE__)
|
4
|
+
|
5
|
+
module Magnesium
|
6
|
+
class TestLink
|
7
|
+
def self.query(sql)#connection
|
8
|
+
#begin
|
9
|
+
@client = Mysql2::Client.new(:host=>Config.config["testlink"]["host"], :username=>Config.config["testlink"]["db_account"], :password=>Config.config["testlink"]["db_pwd"], :database=>Config.config["testlink"]["database"])
|
10
|
+
|
11
|
+
#return client
|
12
|
+
#rescue
|
13
|
+
# error
|
14
|
+
# puts 'connect'
|
15
|
+
#ensure
|
16
|
+
#end
|
17
|
+
#end
|
18
|
+
|
19
|
+
#def self.query(sql)
|
20
|
+
#begin
|
21
|
+
#client = connection
|
22
|
+
result = @client.query(sql)
|
23
|
+
return result
|
24
|
+
#rescue
|
25
|
+
# error
|
26
|
+
#ensure
|
27
|
+
#client.close #if ok
|
28
|
+
#end
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.find_tcase(prefix,caseno)
|
32
|
+
begin
|
33
|
+
result = self.query("select id from testprojects where prefix = '#{prefix}'")
|
34
|
+
result.each do |row|
|
35
|
+
row.map {|k,v| @tp_id = v if k == "id"}
|
36
|
+
end
|
37
|
+
#puts @tp_id
|
38
|
+
|
39
|
+
result = self.query("select tcase_id from tcases_active where tc_external_id = #{caseno}")
|
40
|
+
|
41
|
+
result.each do |row|
|
42
|
+
row.map do |k,v|
|
43
|
+
@tc_id = v if self.find_root(v)==@tp_id
|
44
|
+
end
|
45
|
+
end
|
46
|
+
return @tc_id
|
47
|
+
#rescue
|
48
|
+
#Show.error
|
49
|
+
#ensure
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.find_path(prefix,caseno)
|
54
|
+
begin
|
55
|
+
@tc_id = self.find_tcase(prefix,caseno)
|
56
|
+
puts @tc_id
|
57
|
+
result = self.query("select file_path from attachments where fk_id = #{@tc_id}")
|
58
|
+
result.each do |row|
|
59
|
+
row.map {|k,v| return v}
|
60
|
+
end
|
61
|
+
#rescue
|
62
|
+
#Show.error
|
63
|
+
#puts 'findpath'
|
64
|
+
#ensure
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.find_root(id)
|
69
|
+
begin
|
70
|
+
result = self.query("select parent_id,id from nodes_hierarchy where id = #{id}")
|
71
|
+
result.each do |row|
|
72
|
+
row.map do |k,v|
|
73
|
+
@parent_id = v if k == "parent_id"
|
74
|
+
@id =v if k == "id"
|
75
|
+
end
|
76
|
+
end
|
77
|
+
unless @parent_id.nil?
|
78
|
+
self.find_root(@parent_id)
|
79
|
+
else
|
80
|
+
return @id
|
81
|
+
end
|
82
|
+
#rescue
|
83
|
+
#Show.error
|
84
|
+
#ensure
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
|
89
|
+
def self.find_version(id)
|
90
|
+
begin
|
91
|
+
result = self.query("select id from nodes_hierarchy where parent_id = #{id} and node_type_id = 4")
|
92
|
+
result.each do |row|
|
93
|
+
row.map {|k,v| return v if k == "id"}
|
94
|
+
end
|
95
|
+
#rescue
|
96
|
+
#Show.error
|
97
|
+
#ensure
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
|
102
|
+
def self.find_step_action(id)
|
103
|
+
begin
|
104
|
+
result = self.query("select actions from tcsteps where id in (select id from nodes_hierarchy where parent_id = #{id} and node_type_id = 9) order by step_number")
|
105
|
+
#puts result
|
106
|
+
return result
|
107
|
+
#rescue
|
108
|
+
#Show.error
|
109
|
+
#ensure
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.find_max_step_number(id)
|
114
|
+
begin
|
115
|
+
result = self.query("select max(step_number) from tcsteps where id in (select id from nodes_hierarchy where parent_id = #{id} and node_type_id =9)")
|
116
|
+
return result
|
117
|
+
#rescue
|
118
|
+
#Show.error
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def self.find_step_result(id)
|
123
|
+
begin
|
124
|
+
self.find_max_step_number(id).each do |row|
|
125
|
+
row.map do |k,v|
|
126
|
+
result = self.query("select expected_results from tcsteps where id in (select id from nodes_hierarchy where parent_id = #{id} and node_type_id = 9) and step_number = #{v}")
|
127
|
+
#puts result
|
128
|
+
return result
|
129
|
+
#puts v
|
130
|
+
end
|
131
|
+
end
|
132
|
+
#rescue
|
133
|
+
#Show.error
|
134
|
+
#ensure
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
def self.find_testplan(prefix)
|
140
|
+
begin
|
141
|
+
result = self.query("select id from testplans where testproject_id in (select id from testprojects where prefix = '#{prefix}')")
|
142
|
+
result.each do |row|
|
143
|
+
row.map {|k,v| return v if k == "id"}
|
144
|
+
end
|
145
|
+
#rescue
|
146
|
+
#Show.error
|
147
|
+
#ensure
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def self.find_tester(login)
|
152
|
+
begin
|
153
|
+
result = self.query("select id from users where login = '#{login}'")
|
154
|
+
result.each do |row|
|
155
|
+
row.map {|k,v| return v if k == "id"}
|
156
|
+
end
|
157
|
+
#rescue
|
158
|
+
#Show.error
|
159
|
+
#ensure
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def self.find_build(prefix)
|
164
|
+
begin
|
165
|
+
@testplan_id = self.find_testplan(prefix)
|
166
|
+
result = self.query("select id from builds where testplan_id in (#{@testplan_id})")
|
167
|
+
result.each do |row|
|
168
|
+
row.map{|k,v| return v if k == "id"}
|
169
|
+
end
|
170
|
+
#rescue
|
171
|
+
#Show.error
|
172
|
+
#ensure
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def self.find_tcversion_id(caseno)
|
177
|
+
begin
|
178
|
+
result = self.query("select id from tcversions where tc_external_id = #{caseno}")
|
179
|
+
result.each do |row|
|
180
|
+
row.map {|k,v| return v if k == "id"}
|
181
|
+
end
|
182
|
+
#rescue
|
183
|
+
#Show.error
|
184
|
+
#ensure
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
def self.find_tcversion_number(caseno)
|
189
|
+
begin
|
190
|
+
result = self.query("select version from tcversions where tc_external_id = #{caseno}")
|
191
|
+
result.each do |row|
|
192
|
+
row.map {|k,v| return v if k == "version"}
|
193
|
+
end
|
194
|
+
#rescue
|
195
|
+
#Show.error
|
196
|
+
#ensure
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
def self.find_max_id(table)
|
201
|
+
begin
|
202
|
+
result = self.query("select max(id) from #{table}")
|
203
|
+
result.each do |row|
|
204
|
+
row.map {|k,v| return v}
|
205
|
+
end
|
206
|
+
#rescue
|
207
|
+
#Show.error
|
208
|
+
#ensure
|
209
|
+
end
|
210
|
+
end
|
211
|
+
|
212
|
+
def self.find_platform_id()
|
213
|
+
return 0
|
214
|
+
end
|
215
|
+
|
216
|
+
def self.find_execution_type()
|
217
|
+
#1:manul, 2:auto
|
218
|
+
return 2
|
219
|
+
end
|
220
|
+
|
221
|
+
def self.set_result(prefix,caseno,login,status,notes)
|
222
|
+
begin
|
223
|
+
@id = self.find_max_id("executions").to_i+1
|
224
|
+
@build_id = self.find_build(prefix)
|
225
|
+
@tester_id = self.find_tester(login)
|
226
|
+
@testplan_id = self.find_testplan(prefix)
|
227
|
+
@tcversion_id = self.find_tcversion_id(caseno)
|
228
|
+
@tcversion_number = self.find_tcversion_number(caseno)
|
229
|
+
@platform_id = self.find_platform_id
|
230
|
+
@execution_type = self.find_execution_type
|
231
|
+
execute = self.query("insert into executions values(#{@id},#{@build_id},#{@tester_id},now(),'#{status}',#{@testplan_id},#{@tcversion_id},#{@tcversion_number},#{@platform_id},#{@execution_type},'#{notes}')")
|
232
|
+
#rescue
|
233
|
+
#Show.error
|
234
|
+
#ensure
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
=begin
|
240
|
+
def set_result(prefix,caseno,login,status,notes)
|
241
|
+
begin
|
242
|
+
@id = find_max_id("executions").to_i+1
|
243
|
+
@build_id = find_build(prefix)
|
244
|
+
@tester_id = find_tester(login)
|
245
|
+
@testplan_id = find_testplan(prefix)
|
246
|
+
@tcversion_id = find_tcversion_id(caseno)
|
247
|
+
@tcversion_number = find_tcversion_number(caseno)
|
248
|
+
@platform_id = find_platform_id
|
249
|
+
@execution_type = find_execution_type
|
250
|
+
execute = query("insert into executions values(#{@id},#{@build_id},#{@teste\
|
251
|
+
r_id},now(),'#{status}',#{@testplan_id},#{@tcversion_id},#{@tcversion_number},#\
|
252
|
+
{@platform_id},#{@execution_type},'#{notes}')")
|
253
|
+
rescue
|
254
|
+
error
|
255
|
+
#ensure
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
=end
|
260
|
+
|
261
|
+
=begin
|
262
|
+
puts 'run'
|
263
|
+
find_step(57).each do |row|
|
264
|
+
row.map do |k,v|
|
265
|
+
puts v
|
266
|
+
end
|
267
|
+
end
|
268
|
+
=end
|
269
|
+
|
270
|
+
#find_step_result(58)
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rexml/document'
|
4
|
+
include REXML
|
5
|
+
|
6
|
+
|
7
|
+
module Magnesium
|
8
|
+
class XML
|
9
|
+
def self.openXML(path)
|
10
|
+
begin
|
11
|
+
file = File.read(path)
|
12
|
+
return file
|
13
|
+
rescue
|
14
|
+
error
|
15
|
+
#ensure
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.new_document(file)
|
20
|
+
begin
|
21
|
+
doc = Document.new file
|
22
|
+
return doc
|
23
|
+
rescue
|
24
|
+
error
|
25
|
+
#ensure
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.closeXML(file)
|
30
|
+
begin
|
31
|
+
file.close
|
32
|
+
rescue
|
33
|
+
error
|
34
|
+
#ensure
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.modify_attribute(filepath,path,attribute,value)
|
39
|
+
begin
|
40
|
+
file = File.read(filepath)
|
41
|
+
doc = Document.new file
|
42
|
+
|
43
|
+
doc.elements.each(path) do |e|
|
44
|
+
e.add_attribute(attribute,value)
|
45
|
+
end
|
46
|
+
File.delete(filepath)
|
47
|
+
f = File.new(filepath,'w+')
|
48
|
+
puts 'M: Let\'s review the config file.'
|
49
|
+
puts '............................................................'
|
50
|
+
f.puts doc.write
|
51
|
+
rescue
|
52
|
+
error
|
53
|
+
#ensure
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
=begin
|
59
|
+
def attribute(doc,xpath,value)
|
60
|
+
begin
|
61
|
+
doc.elements.each(xpath) do |e|
|
62
|
+
unless value.nil?
|
63
|
+
return e.attributes[value.to_s]
|
64
|
+
else
|
65
|
+
return e
|
66
|
+
end
|
67
|
+
end
|
68
|
+
rescue
|
69
|
+
error
|
70
|
+
#ensure
|
71
|
+
end
|
72
|
+
end
|
73
|
+
=end
|
data/magnesium.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'magnesium/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "magnesium"
|
8
|
+
spec.version = Magnesium::VERSION
|
9
|
+
spec.authors = ["Meichen Zhou"]
|
10
|
+
spec.email = ["meichen.chow@gmail.com"]
|
11
|
+
spec.description = %q{A web test automation platform, which integrates with watir-webdriver, TestLink and Mantis}
|
12
|
+
spec.summary = %q{A web test automation platform, which integrates with watir-webdriver, TestLink and Mantis}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
22
|
+
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
24
|
+
end
|