pythonweb自动化测试脚本语言_基于python的自动化测试脚本:web端以及接口、APP测试...

一、项目:针对百度首页搜索功能的测试:python+selenium+unittest

1、page object 封装页面元素。

from poium importPage, NewPageElementclassBaiduPage(Page):"""封装百度Page层"""search_input= NewPageElement(id_="kw",describe="搜索框")

search_button= NewPageElement(id_="su",describe="搜索按钮")

setting= NewPageElement(id_="s-usersetting-top",describe="设置按钮")

search_setting= NewPageElement(link_text="搜索设置")

high_level_setting= NewPageElement(link_text="高级设置")

save_setting= NewPageElement(link_text="保存设置")

language_setting= NewPageElement(id_ = "SL_1",describe="简体中文")

2、封装谷歌浏览器启动操作

importunittestfrom selenium importwebdriverclassLaunch_Brower(unittest.TestCase):"""开启/关闭 谷歌浏览器"""@classmethoddefsetUpClass(cls):

cls.driver=webdriver.Chrome()

cls.baidu_url= "https://www.baidu.com/"@classmethoddeftearDownClass(cls):

cls.driver.quit()if __name__=="__main__":

unittest.main()

3、test case:用parameterized.expand()或ddt.file_data实现参数化。

importunittest,csv,codecs, os, sys

base_path= os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

sys.path.insert(0, base_path)from common.launch_brower importLaunch_Browerfrom page.baidu_page importBaiduPagefrom time importsleepfrom parameterized importparameterizedfrom itertools importislicefrom ddt importddt,file_data,unpack

@ddtclassTestSearchKeyword(Launch_Brower):defsearch_keyword(self,keyword):

page=BaiduPage(self.driver)

page.get(self.baidu_url)

page.search_input.send_keys(keyword)

page.search_button.click()

sleep(2)defget_data(file_path):"""读取参数化文件baidu_data.csv"""data=[]

with codecs.open(file_path ,"r") as f:

temp=csv.reader(f)for i in islice(temp,1,None):

data.append(tuple(i))returndata

@parameterized.expand(

get_data(base_path+

"/test_case/baidu_data/data_file.csv"))deftest_01_search_keyword(self,name,keyword):

self.search_keyword(keyword)

title=self.driver.title

self.assertEqual(title, keyword+ "_百度搜索")

@file_data("ddt.json")

@unpackdeftest_02_search_keyword(self,keyword):

self.search_keyword(keyword)

title=self.driver.title

self.assertEqual(title, keyword+ "_百度搜索")if __name__=="__main__":

unittest.main(verbosity=2)

4、调用HTMLTestRunner运行测试用例生成报告。

importtime,unittestfrom HTMLTestRunner importHTMLTestRunnerimporttime,sys

sys.path.append("./test_case")if __name__=="__main__":

test_dir= './test_case'suit= unittest.defaultTestLoader.discover(test_dir,pattern='test*.py')

now_time= time.strftime("%Y-%m-%d %H_%M_%S")

filename= './report/'+now_time+'_result.html'with open(filename,"wb") as fp:

runner= HTMLTestRunner(stream=fp,

title='百度',

description="win 10",

verbosity=2)

runner.run(suit,rerun=0,save_last_run=False)

fp.close()

二、针对Django项目的接口测试:python+requests+unittest

1、封装数据库的连接和操作:

from pymysql importconnect, cursorsfrom pymysql.err importOperationalErrorclassDB:def __init__(self):try:

self.connection= connect(host='127.0.0.1',

port=int(3306),

db= 'guest',

user= 'root',

password= '123456',

charset= 'utf8',

cursorclass=cursors.DictCursor)exceptOperationalError as e:print("Mysql Error %d: %s" % (e.args[0], e.args[1]))

self.cur=self.connection.cursor()definsert(self, table_name, data):for key indata:

data[key]= "'"+str(data[key])+"'"key= ','.join(data.keys())

value= ','.join(data.values())

sql= "INSERT INTO" + table_name + "(" + key + ") VALUES\

(" + value + ")"self.cur.execute(sql)

self.connection.commit()defclear(self,table_name):

sql= "delete from" + table_name + ";"self.cur.execute("SET FOREIGN_KEY_CHECKS=0;")

self.cur.execute(sql)

self.connection.commit()defclose(self):

self.connection.close()#初始化数据:将测试数据插入表

definit_data(self,datas):for table_name,data indatas.items():

self.clear(table_name)for d indata:

self.insert(table_name,d)

self.close()if __name__=="__main__":

db=DB()

db.close()

二、构造测试数据:

importsys, time

sys.path.append('./db_fixture')from mysql_db importDB#定义时间

time = time.strftime("%Y-%m-%d %H:%M:%S")#构造数据

datas ={'sign_event':[

{'id':1,'name':'redmi','`limit`':2000,'status':1,'address':'beijing','start_time': time},

],'sign_guest':[

{'id':1,'realname':'alen','phone':13511001100,'email':'alen@mail.com','sign':0,'event_id':1},

{'id':2,'realname':'jerry','phone':13511001101,'email':'sign@mail.com','sign':1,'event_id':1},

{'id':3,'realname':'tom','phone':13511001102,'email':'tom@mail.com','sign':0,'event_id':1},

],

}#初始化数据

definit_data():

DB().init_data(datas)if __name__ == '__main__':

init_data()

3、test case

importunittestimportrequestsclassGetEventListTest(unittest.TestCase):"""查询发布会信息:带用户验证"""

defsetUp(self):

self.url= "http://127.0.0.1:8000/api/sec_get_event_list/"

deftearDown(self):print(self.result)deftest_01_get_event_list_success(self):"""query is success"""user_auth= ("admin", "admin123")

r= requests.get(self.url, auth = user_auth, params={"eid":2})

self.result=r.json()

self.assertEqual(self.result["status"],200)

self.assertEqual(self.result["message"],"success")

self.assertEqual(self.result["data"]["address"], 'beijing')

self.assertEqual(self.result["data"]["name"], "iphone")if __name__=="__main__":

unittest.main(verbosity=2)

importunittest,requests,hashlibimporttimeclassAddEventTest(unittest.TestCase):defsetUp(self):

self.url= "http://127.0.0.1:8000/api/sec_add_event/"

"""参考接口开发代码生成md5()加密对象的方式来

生成测试脚本的md5()参数.

md5(api_key + time)"""

#接口签名代码中获取api_key

self.api_key = "&Guest-Bugmaster"

#当前时间

now_time =time.time()

self.client_time=str(now_time).split('.')[0]#接口签名代码中获取加密对象生成方式

md5 =hashlib.md5()

sign_str= self.client_time+self.api_key

sign_bytes_utf8=sign_str.encode(encoding='utf-8')

md5.update(sign_bytes_utf8)

self.sign_md5=md5.hexdigest()deftearDown(self):print(self.result)deftest_01_add_event_success(self):"""添加成功"""payload={"eid":3,"name":"HUAWEI","limit":2000,"address":"shanghai","start_time":"2014-05-03 12:20:32","time":self.client_time,"sign":self.sign_md5}

r= requests.post(self.url,data=payload)

self.result=r.json()

self.assertEqual(self.result["status"],200)

self.assertEqual(self.result["message"],"add event success")if __name__=="__main__":

unittest.main(verbosity=2)

4、运行测试用例:

importtime, sys,unittest

sys.path.append('./interface')

sys.path.append('./db_fixture')from db_fixture importtest_datafrom HTMLTestRunner importHTMLTestRunner

test_dir= './interface'suit= unittest.defaultTestLoader.discover(test_dir, pattern='*_test.py')if __name__ == "__main__":

test_data.init_data()#初始化接口测试数据

now= time.strftime("%Y-%m-%d %H_%M_%S")

filename= './report/' + now + '_result.html'fp= open(filename, 'wb')

runner= HTMLTestRunner(stream=fp,

title='接口自动化测试',

description='运行环境:MySQL(PyMySQL), \

Requests, unittest',

verbosity=2)

runner.run(suit,rerun=0,save_last_run=False)

fp.close()

三、启动有道APP。

importunittest,timefrom appium importwebdriverfrom appium.webdriver.common.touch_action importTouchActionfrom selenium.webdriver.support.ui importWebDriverWaitfrom selenium.webdriver.support importexpected_conditions as EC

caps={}

caps["deviceName"] = "HWJSN-HW"caps["automationName"] = "appium"caps["platformVersion"] = "10"caps["platformName"] = "Android"caps["appPackage"] = "com.youdao.dict"caps["appActivity"] = ".activity.MainActivity"caps["ensureWebviewsHavePages"] =TrueclassLaunch_youdao(unittest.TestCase):

@classmethoddefsetUpClass(cls):

cls.driver= webdriver.Remote("http://localhost:4723/wd/hub", caps)

cls.driver.implicitly_wait(10)try:

loc= ("xpath", "//*[@text='始终允许']")

el= WebDriverWait(cls.driver, 5, 0.5).until(EC.presence_of_element_located(loc))

TouchAction(cls.driver).tap(el).perform()except:pass@classmethoddeftearDownClass(cls):

cls.driver.quit()if __name__=="__main__":

unittest.main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值