Changes between Version 60 and Version 61 of DeveloperGuidelines/Testing/Selenium
- Timestamp:
- 07/02/13 19:01:02 (12 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
DeveloperGuidelines/Testing/Selenium
v60 v61 112 112 113 113 == Writing / Creating your own test scripts: == 114 We aim to make it as easy as possible to write additional tests, which can easily be plugged into the Sahana Eden Testing System Framework. 115 116 The canonical example is: {{{eden/modules/tests/org/create_organisation.py}}} 114 We aim to make it as easy as possible to write additional tests, which can easily be plugged into the Sahana Eden Testing System Framework. 117 115 118 116 New tests should be stored in a subfolder per module, adding the foldername to {{{eden/modules/tests/__init__.py}}} & creating an {{{__init__.py}}} in the subfolder. 119 117 120 '''A walk-through example:'''[[BR]] 121 We want to make an automated test script to test the Create Organization module. 122 Create Organization falls under Human Resources Management (HRM) feature, therefore we must add this test script module file in the subfolder /hrm (eden/modules/tests/hrm/) 123 124 Steps of automated the test for Create Organization:[[BR]][[BR]] 118 '''A walk-through example: Creating a Record'''[[BR]] 119 120 The canonical example is: {{{eden/modules/tests/staff/create_staff.py}}} 121 122 We want to make an automated test script to test the Create Staff module. 123 Create Staff falls under Staff feature, therefore we must add this test script module file in the subfolder /staff (eden/modules/tests/staff/) 124 125 Steps of automated the test for Create Staff:[[BR]][[BR]] 125 126 126 1) Let's call this test file: create_ organization.py and save it in the subfolder /hrm. [[BR]][[BR]]127 1) Let's call this test file: create_staff.py and save it in the subfolder /staff. [[BR]][[BR]] 127 128 128 129 2) We must now make sure we add the file name in the __init__.py 129 Open file __init__.py in the subfolder /hrm and add: 130 {{{ 131 from create_organisation import * 132 }}} 133 3) create_organisation.py 134 {{{ 135 import os 136 import time 137 from selenium.common.exceptions import NoSuchElementException 138 from gluon import current 139 from s3 import s3_debug 130 Open file __init__.py in the subfolder /staff and add: 131 {{{ 132 from create_staff import * 133 }}} 134 3) create_staff.py 135 {{{ 136 140 137 from tests.web2unittest import SeleniumUnitTest 141 138 142 class CreateOrganization(SeleniumUnitTest): 143 144 # ------------------------------------------------------------------------- 145 def test_org001_create_organisation(self, items=[0]): 139 class CreateStaff(SeleniumUnitTest): 140 def test_hrm001_create_staff(self): 146 141 """ 147 Create an Organisation 142 @case: HRM001 143 @description: Create a Staff 148 144 149 @param items: Organisation(s) to create from the data 150 151 @ToDo: currently optimised for a single record 145 @TestDoc: https://docs.google.com/spreadsheet/ccc?key=0AmB3hMcgB-3idG1XNGhhRG9QWF81dUlKLXpJaFlCMFE 146 @Test Wiki: http://eden.sahanafoundation.org/wiki/DeveloperGuidelines/Testing 152 147 """ 153 148 print "\n" 154 # Configuration 155 self.login(account="normal", nexturl="org/organisation/create") 156 tablename = "org_organisation" 157 #data = current.data["organisation"] 158 # Data for the Organisation resource 159 self.create("org_organisation", 160 [( "name", "Romanian Food Assistance Association (Test)"), ( "acronym", "RFAAT"), ("website", "http://www.rfaat.com"), ("comments", "This is a Test Organization")] 149 150 self.login(account="admin", nexturl="hrm/staff/create") 151 152 self.create("hrm_human_resource", 153 [( "organisation_id", 154 "International Federation of Red Cross and Red Crescent Societies"), 155 ( "site_id", 156 "AP Zone (Office)"), 157 ( "first_name", 158 "Robert", 159 "pr_person"), 160 ( "middle_name", 161 "James", 162 "pr_person"), 163 ( "last_name", 164 "Lemon", 165 "pr_person"), 166 ( "email", 167 "rjltestdonotusetest99@romanian.com", 168 "pr_person"), 169 ( "job_title_id", 170 "Warehouse Manager"), 171 ] 161 172 ) 162 for item in items: 163 _data = data[item] 164 # Check whether the data already exists 165 s3db = current.s3db 166 db = current.db 167 table = s3db[tablename] 168 fieldname = _data[0][0] 169 value = _data[0][1] 170 query = (table[fieldname] == value) & (table.deleted == "F") 171 record = db(query).select(table.id, 172 limitby=(0, 1)).first() 173 if record: 174 print "org_create_organisation skipped as %s already exists in the db\n" % value 175 return False 176 177 # Login, if not-already done so 178 self.login(account=account, nexturl=url) 179 }}} 173 }}} 174 175 * The create function takes 2 arguments - {{{create(table_name, data)}}} 176 * {{{table_name}}} - The name of the database table in which we want to insert the record. 177 * {{{data}}} - The list which contains the record to be inserted. 178 * Each tuple in the above list contains information about each individual field. 179 * Eg - {{{( "organisation_id","International Federation of Red Cross and Red Crescent Societies")}}}. Here, {{{organisation_id}}} is the label of the field in which we want to insert data {{{International Federation of Red Cross and Red Crescent Societies}}} 180 180 181 181 4) To run this automated test script. 182 Open suite.py (modules/tests/suite.py) and add at the bottom of suite.py script so it can be executed. (NOTE: We add the class name, not the function name). 183 {{{ 184 addTests(loadTests(CreateOrganization)) 182 Determine the template(s) on which you wish to run this test on. The tests for each template are defined in {{{private/templates/<template_name>/tests.py}}}. 183 Open tests.py for these templates and append the class name of the test to the list so it can be executed. (NOTE: We add the class name, not the function name). 184 {{{ 185 current.selenium_tests.append("CreateStaff") 185 186 }}} 186 187