python语言从零学习与爬虫实现
for循环练习:
`for i in range(0,4):
print(“i=”,i)
s=3
for i in range(1,5,2):
s=s+i
print(“i=”,i)
print(“s=”,s)
s=0
for i in range(5,1,-1):
s=s+i
print(“i=”,i)
print(“s=”,s)
for i in range(1,4):
for j in range(1,3):
print(i,j)`
打印九九乘法表:
for i in range(1,10):
for j in range(1,i+1):
result=i*j
print(j,"*",i,"=",result," ","\t",end="")
print(" ")
冒泡排序算法:
def bubble(nums):
for i in range(len(nums)-1):
for j in range(len(nums)-i-1):
if(nums[j]>nums[j+1]):
temp = nums[j]
nums[j] = nums[j+1]
nums[j+1] = temp
return nums
折半查找算法:
def search(a,ls):
left = 0
n = len(ls)
right = n - 1
mid = (left + right) // 2
while (left <= right):
if (a > ls[mid]):
left = mid + 1
elif (a < ls[mid]):
right = mid - 1
else:
#print("找到数字为", a)
return 1
mid = (left + right) // 2
print("新的中间位置为", mid, "中间数为", ls[mid])
#if (left > right):
#print("没有找到该数字")
return 0
a=int(input("输入一个数"))
ls=[1,3,4,7,9,23]
result=search(a,ls)
if(result==0):
print("该数不存在")
else:
print("该数存在")
强化训练:
'''
#M与N数学运算
#加法类
class addClass:
def __init__(self,a,b):
self.a1=a
self.a2=b
def add(self):
res=self.a1+self.a2
return res
#减法类
class minusClass:
def __init__(self,a,b):
self.a1=a
self.a2=b
def minus(self):
res=self.a1-self.a2
return res
#乘法类
class multiplyClass:
def __init__(self,a,b):
self.a1=a
self.a2=b
def multiply(self):
res=self.a1*self.a2
return res
#幂次类
class powerClass:
def __init__(self,a,b):
self.a1 = a
self.a2 = b
def pow(self):
res=self.a1**self.a2
return res
#余数类
class remainClass:
def __init__(self,a,b):
self.a1 = a
self.a2 = b
def remain(self):
res=self.a1%self.a2
return res
#比较大小类
class biggerClass:
def __init__(self,a,b):
self.a1 = a
self.a2 = b
def bigger(self):
if(self.a1>self.a2):
res=self.a1
else:
res=self.a2
return res
if __name__=='__main__':
print("请输入M:")
M=int(input())
print("请输入N:")
N=int(input())
obj1=addClass(M,N)
obj2=minusClass(M,N)
obj3=multiplyClass(M,N)
obj4=powerClass(M,N)
obj5=remainClass(M,N)
obj6=biggerClass(M,N)
res1=obj1.add()
res2=obj2.minus()
res3=obj3.multiply()
res4=obj4.pow()
res5=obj5.remain()
res6=obj6.bigger()
print("两数之和是:",res1)
print("两数之差是:",res2)
print("两数之积是:",res3)
print("M的N次幂是:",res4)
print("M除N的余数是:",res5)
print("两数较大的是:",res6)
#计算矩形面积
#计算面积类
class areaClass:
def __init__(self,a,b):
self.a1=a
self.a2=b
def area(self):
s=self.a1*self.a2
return s
if __name__=='__main__':
print("请输入矩形的长:")
a=int(input())
print("请输入矩形的宽:")
b=int(input())
Area=areaClass(a,b)
res=Area.area()
print("矩形的面积是:",res)
'''
'''
#求所有三位水仙花数
print("三位水仙花数有:")
for i in range(1,1000):
a=i%100%10
b=i%100//10
c=int(i/100)
res=a**3+b**3+c**3
if(res==i):
print(i)
#100以内斐波那契数列
def fib(n):
a,b=1,1
for i in range(n):
print(a)
a,b=b,a+b
if(a>n):
break
fib(100)
#计算1+2+...+ 99+100
def cal(n):
j=1
for i in range(2,n):
j=i+j
print(j)
cal(101)
#求1~100所有偶数的和
j=2
i=4
while(i<101):
j=i+j
i=i+2
print(j)
#比较两数大小
class biggerClass:
def __init__(self,a,b):
self.a1=a
self.a2=b
def bigger(self):
if(self.a1>self.a2):
res=self.a1
else:
res=self.a2
return res
if __name__=='__main__':
print("请输入第一个数:")
i=input()
print("请输入第二个数:")
j=input()
obj=biggerClass(i,j)
res=obj.bigger()
print("两数中较大的是:",res)
#四个数字组成三位数
for a in range(1,5):
for b in range(1,5):
for c in range(1,5):
if(a!=b and a!=c and b!=c):
res=a*100+b*10+c
print(res)
#球体落地
class BallClass:
def __init__(self,n,m):
self.n=n #第n次落地
self.m=m #从m米落下
#计算共经过多少米
def mile(self):
if(self.n==1):
mi=self.m
if(self.n==2):
mi=self.m*2
if(self.n>2):
add=0
for i in range(1,self.n-1):
add=add+self.m/(2*i)
mi=add+self.m*2
return mi
#计算反弹多高
def high(self):
hig=self.m/(2**self.n)
return hig
if __name__=='__main__':
miobj=BallClass(10,100)
res1=miobj.mile()
print("球在第十次落地时共经过",res1,"米")
res2=miobj.high()
print("第十次反弹",res2,"米高")
'''
使用爬虫获取招聘网站招聘职位信息
import requests
from lxml import etree
from spider.spiderv2 import spider_v2
class spider_v3(spider_v2):
def __init__(self):
spider_v2.__init__(self,url)
def position(self,spage):
for j in range(4,54):
dic={}
document=etree.HTML(spage)
element=document.xpath('//*[@id="resultList"]/div['+str(j)+']/span[1]/a/text()')
dic['公司名'] = element
print(dic,end="")
for i in range(2,5):
dic1={}
lis=['','','地点','月薪','发布日期']
element=document.xpath('//*[@id="resultList"]/div['+str(j)+']/span['+str(i)+']/text()')
dic1[lis[i]]=element
print(dic1,end="")
print("")
if __name__=='__main__':
url='https://search.51job.com/list/000000,000000,0000,00,9,99,%25E8%25BD%25AF%25E4%25BB%25B6%25E6%25B5%258B%25E8%25AF%2595,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare='
spider3obj=spider_v3()
spider3obj.url=url
res=spider3obj.submit_get(spider3obj.url)
pos=spider3obj.position(res)
使用Locust进行电商平台性能测试
登录功能单点测试
#对登录功能进行单点性能测试(多组测试数据:从CSV文件中读取)
from locust import HttpLocust,task,TaskSet
import csv
#定义测试类:用户行为
class UserBehavior(TaskSet):
#指定测试任务
@task
def test_page(self):
#定义登录测试数据
file = open("userdata.csv", "r")
tables = csv.reader(file)
for rows in tables:
print(rows[0])
print(rows[1])
logindata={"login_info":rows[0],"password":rows[1]}
#发送首页请求给服务器post
self.client.post("/index.php?controller=simple&action=login",data=logindata)
class WebSiteUser(HttpLocust):
host="http://localhost/iwebshop/"
task_set = UserBehavior
min_wait = 2000
max_wait = 5000
使用关联技术进行测试
#针对关联技术,不登录直接访问用户账户,进行性能测试
from locust import HttpLocust,task,TaskSet
from gevent._semaphore import Semaphore
all_locusts_spawned=Semaphore()
all_locusts_spawned.acquire()
class UserBehavior_mycount(TaskSet):
def on_start(self):
all_locusts_spawned.wait()
@task
def test_mycount(self):
head={
'Cookie': 'iweb_username=dc2a6bf586MDI0MDAwMDk1MGBnYTBrZGA4Yj1rNjczNmZkaGYxMjB0YnN9OTk; iweb_safecode=d9f9d34ab0MDA3NTAwMDkwMGw%2FPDdjMGJrY2RhMWY3NmFhZTM1YDMxNGVlMGViMDY2NzBmMjQ1MDIyOTExZGFkNzRhMWU4ZA; iweb_user_pwd=46d95e3167MDA2NzI1MDA2MzdjZDk2MGU7M2FhMTZiPmVlMmczNzY5P2U3PDIxPjg2PWRiNzJjOzJhNTQ%2FZWQ9YDoyMDE1Ng; iweb_user_id=4d30fde333MDAwODY4NTkwMDBiODM%2FMGE%2FYjhjO2FmZ2NmNTtoMDM3NjQ; iweb_head_ico=d6fd9a9140MDU1NDIwOTQ4MDM0Yj4yMTVjZzU6Njk5ZWJmPGQ3MTE; PHPSESSID=fskkbo8jmjgparlcif5lprird1',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko'}
response = self.client.get("/index.php?controller=ucenter", headers=head).text
print(response)
class webSiteUser(HttpLocust):
host = "http://localhost/iwebshop/"
task_set = UserBehavior_mycount
min_wait = 2000
max_wait = 5000
注册功能单点测试
#针对注册功能进行性能测试
from locust import HttpLocust,task,TaskSet
class UserBehavior_reg(TaskSet):
@task
def test_reg(self):
#构造测试数据
for i in range(10,21):
user="test"+str(i)
regdata = {"email": user+"@51testing.com",
"username": user,
"password": "111111",
"repassword": "111111",
"captcha": "11111",
"callback": "?controller=simple&action=login"}
response=self.client.post("/index.php?controller=simple&action=reg_act",data=regdata).text
loc=response.find("恭喜")
if loc>=0:
print(user+"测试成功")
else:
print(user+"测试失败")
class webSiteUser(HttpLocust):
host = "http://localhost/iwebshop"
task_set = UserBehavior_reg
min_wait = 2000
max_wait = 5000
查询功能单点测试
#针对查询功能进行性能测试
from locust import HttpLocust,task,TaskSet
from gevent._semaphore import Semaphore
import requests
import datetime
import csv
import os
from lxml import etree
all_locusts_spawned=Semaphore()
all_locusts_spawned.acquire()
class UserBehavior_search(TaskSet):
def on_start(self):
all_locusts_spawned.wait()
def createdata(self):
result1 = os.path.exists("searchdata.csv")
if result1:
os.remove("searchdata.csv")
datafile = open("searchdata.csv", "w")
response1 = requests.get("http://localhost/iwebshop/index.php?controller=site&action=sitemap").text
doc = etree.HTML(response1)
for i in range(1, 6):
keyword = doc.xpath('/html/body/div[1]/div[6]/div[2]/div[3]/table[' + str(i) + ']/tbody/tr[2]/td/a/text()')
for ele in keyword:
datafile.write(str(ele) + "\n")
datafile.close()
@task
def test_search(self):
file=open("searchdata.csv","r")
file2=open("searchresult.csv","a")
rows=csv.reader(file)
for word in rows:
#print(word)
response=self.client.get("/index.php?controller=site&action=search_list&word="+str(word)).text
loc = response.find(str(word))
te=datetime.datetime.now()
if loc >= 0:
#print(str(word)+"测试成功")
result=str(te)+str(word)+"测试成功"
file2.write(result+"\n")
else:
#print(str(word)+"测试失败")
result =str(te)+str(word)+"测试失败"
file2.write(result+"\n")
file2.close()
class webSiteUser(HttpLocust):
host = "http://localhost/iwebshop"
result2 = os.path.exists("searchresult.csv")
if result2:
os.remove("searchresult.csv")
task_set = UserBehavior_search
min_wait = 2000
max_wait = 5000
混合业务测试
#进行登录+查询的业务场景性能测试
from locust import HttpLocust,task,TaskSet
import csv
class UserBehavior_workflow1(TaskSet):
#登录任务
@task(2)
def test_login(self):
#定义登录测试数据
for i in range(1,101):
username="dabai"+str(i)
logindata={"login_info":username,"password":"123456"}
#发送首页请求给服务器post
response=self.client.post("/index.php?controller=simple&action=login_act",data=logindata).text
#print(response)
loc=response.find(username)
if loc>-1:
print(username+"登录测试成功")
else:
print(username+"登录测试失败")
#查询任务
@task(3)
def test_search(self):
file = open("searchdata.csv", "r")
file2 = open("searchresult.csv", "w")
rows = csv.reader(file)
for word in rows:
# print(word)
response = self.client.get("/index.php?controller=site&action=search_list&word=" + str(word)).text
loc = response.find(str(word))
if loc >= 0:
# print(str(word)+"测试成功")
result = str(word) + "测试成功"
file2.write(result + "\n")
else:
# print(str(word)+"测试失败")
result = str(word) + "测试失败"
file2.write(result + "\n")
file2.close()
#tasks = {test_login:1,test_search:3}
#注册任务
@task(1)
def test_reg(self):
# 构造测试数据
for i in range(31, 41):
user = "test" + str(i)
regdata = {"email": user + "@51testing.com",
"username": user,
"password": "111111",
"repassword": "111111",
"captcha": "11111",
"callback": "?controller=simple&action=login"}
response = self.client.post("/index.php?controller=simple&action=reg_act", data=regdata).text
loc = response.find("恭喜")
if loc >= 0:
print(user + "测试成功")
else:
print(user + "测试失败")
class webSiteUser(HttpLocust):
host = "http://localhost/iwebshop/"
task_set = UserBehavior_workflow1
min_wait = 2000
max_wait = 5000
使用selenium进行自动化测试
进行bing搜索
#1.打开浏览器
from selenium import webdriver
chrome=webdriver.Chrome()
#2.打开bing网站
chrome.get("https://cn.bing.com/")
#3.输入关键词
chrome.find_element_by_id("sb_form_q").send_keys("51testing")
#4.点击搜索按钮
chrome.find_element_by_id("sb_form_go").click()
#5.检查搜索结果
JD商城购物
#自动化进行一次京东商城购物
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.support.select import Select
jing=webdriver.Chrome()
jing.implicitly_wait(15)
jing.get("https://www.jd.com/")
jing.find_element_by_id("key").send_keys("iphone")
jing.find_element_by_class_name("button").click()
jing.find_element_by_xpath("//*[@id='J_goodsList']/ul/li[1]/div/div[1]/a/img").click()
new_window=jing.window_handles[-1]
jing.switch_to.window(new_window)
jing.find_element_by_link_text("加入购物车").click()
jing.find_element_by_id("GotoShoppingCart").click()
#鼠标悬停操作
move=jing.find_element_by_class_name("ui-area-text")
ActionChains(jing).move_to_element(move).perform()
sheng=jing.find_element_by_class_name("ui-area-current").click()
电商平台购物测试
import time
from selenium import webdriver
from selenium.webdriver.support.select import Select
driver=webdriver.Chrome()
#隐式等待
driver.implicitly_wait(10)
#窗口最大化
driver.maximize_window()
#1.登录
driver.get("http://127.0.0.1/index.php?m=user&c=public&a=login")
driver.find_element_by_id("username").send_keys("test")
driver.find_element_by_id("password").send_keys("111111")
driver.find_element_by_class_name("login_btn").click()
#2.点击“进入商城购物”
#第三种元素定位方法:id,classname,linktext
#导包快捷键alt+enter
#第四种方法:by_name
#优先顺序:id->name->classname-><a>才适合linke_text()
time.sleep(3)
driver.find_element_by_link_text("进入商城购物").click()
driver.find_element_by_name("keyword").send_keys("iphone")
driver.find_element_by_class_name("btn1").click()
#3.搜索iphone
#第五种元素定位方法:比较万能的方法xpath
driver.find_element_by_xpath("/html/body/div[3]/div[2]/div[3]/div/div[1]/a/img").click()
#切换到新窗口
#5.1找到新窗口名字
new_window=driver.window_handles[-1]
#5.2切换到新窗口
driver.switch_to.window(new_window)
#加入购物车
driver.find_element_by_id("joinCarButton").click()
driver.find_element_by_class_name("shopCar_T_span3").click()
#点击结算
#driver.find_element_by_class_name("shopCar_btn_03")
#第六种元素定位方法:css selector 最重要的一种方法
driver.find_element_by_css_selector(".shopCar_btn_03.fl").click()
#添加新地址
driver.find_element_by_class_name("add-address").click()
#收货人姓名
driver.find_element_by_name("address[address_name]").send_keys("lkx")
#手机号
driver.find_element_by_name("address[mobile]").send_keys("13344673345")
#收货地址-省
sheng=driver.find_element_by_id("add-new-area-select")
Select(sheng).select_by_visible_text("山西省")
#选择收货地址-市
shi=driver.find_elements_by_class_name("add-new-area-select")[1]
Select(shi).select_by_visible_text("大同市")
#选择地区
qv=driver.find_elements_by_tag_name("select")[2]
Select(qv).select_by_visible_text("市辖区")
driver.find_element_by_class_name("add-new-name-span-2").send_keys("无")
driver.find_element_by_class_name("add-new-name-span-3").send_keys("100000")
driver.find_element_by_class_name("aui_state_highlight").click()
电商平台修改个人信息
import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
driver=webdriver.Chrome()
driver.implicitly_wait(10)
driver.maximize_window()
driver.get("http://127.0.0.1/index.php?m=user&c=public&a=login")
driver.find_element_by_id("username").send_keys("test")
driver.find_element_by_id("password").send_keys("111111")
#submit方法,类似于click,只能用于form表单中
driver.find_element_by_id("password").submit()
#这里submit方法就代替了定位登录按钮并点击的操作
#点击账号设置
driver.find_element_by_link_text("账号设置").click()
#点击个人资料
#选择部分链接文本
driver.find_element_by_partial_link_text("人资").click()
#修改姓名
driver.find_element_by_id("true_name").clear()
driver.find_element_by_id("true_name").send_keys("培养基")
driver.find_element_by_css_selector('[value="1"]').click()
#也可driver.find_element_by_css_selector("[value='1']")
#删除readonly属性
script='document.getElementById("date").removeAttribute("readonly")'
driver.execute_script(script)
#在生日输入框中输入新的生日
#清空默认值
driver.find_element_by_id("date").clear()
driver.find_element_by_id("date").send_keys("1980-02-02")
driver.find_element_by_id("qq").clear()
driver.find_element_by_id("qq").send_keys("690690797")
driver.find_element_by_css_selector('[value="确认"]').click()
#弹出框处理
#智能等待之显式等待
WebDriverWait(driver,30,0.5).until(expected_conditions.alert_is_present())
update_status=driver.switch_to.alert.text
print(update_status)
driver.switch_to.alert.accept()
电商后台管理添加商品
#打开后台登录页面
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.select import Select
from selenium.webdriver.support.wait import WebDriverWait
driver=webdriver.Chrome()
driver.implicitly_wait(5)
driver.maximize_window()
driver.get("http://127.0.0.1/index.php?&m=admin&c=public&a=login")
#输入用户名、密码
driver.find_element_by_name("username").send_keys("admin")
driver.find_element_by_name("userpass").send_keys("password")
driver.find_element_by_name("userverify").send_keys("1234")
driver.find_element_by_class_name("Btn").click()
driver.find_element_by_link_text("商品管理").click()
driver.find_element_by_link_text("添加商品").click()
#输入商品名称
#driver.find_element_by_name("name").send_keys("iphone xs max")
#driver.find_element_by_xpath("/html/body/div[2]/div[2]/dl/form/dd[1]/ul/li[1]/input").send_keys("iphone xs max")
#把selenium切换到子页面中
driver.switch_to.frame("mainFrame")
driver.find_element_by_name("name").send_keys("iphone xs max")
#选择商品分类
driver.find_element_by_id("1").click()
driver.find_element_by_id("2").click()
driver.find_element_by_id("6").click()
# driver.find_element_by_id("7").click()
ActionChains(driver).double_click(driver.find_element_by_id("7")).perform()
brand=driver.find_element_by_name("brand_id")
Select(brand).select_by_value("1")
#添加商品图片
driver.find_element_by_link_text("商品图册").click()
# driver.find_element_by_css_selector("#filePicker label").click()
#driver.find_element_by_class_name("button_search").click()
driver.find_element_by_name("file").send_keys("C:/Users/69569/Pictures/1.jpg")
driver.find_element_by_css_selector(".uploadBtn.state-finish.state-ready").click()
#处理弹出框
WebDriverWait(driver,30,0.5).until(expected_conditions.alert_is_present())
driver.switch_to.alert.accept()
driver.find_element_by_class_name("button_search").click()
自动化测试框架练习
BaseTestCase
import unittest2
from selenium import webdriver
class BaseTestCase(unittest2.TestCase):
@classmethod
def setUpClass(cls):
cls.driver=webdriver.Chrome()
cls.driver.maximize_window()
cls.driver.implicitly_wait(10)
def switch_window(self):
new_window=self.driver.window_handles[-1]
self.driver.switch_to.window(new_window)
@classmethod
def tearDownClass(cls):
cls.driver.quit()
测试用例
import time
import unittest2
from auto_test_frame.testcases.BaseTestCase import BaseTestCase
from selenium.webdriver import ActionChains
from selenium.webdriver.support.select import Select
class AddGoodsTest(BaseTestCase):
def test_addgoods(self):
self.driver.get("http://127.0.0.1/index.php?&m=admin&c=public&a=login")
self.driver.find_element_by_name("username").send_keys("admin")
self.driver.find_element_by_name("userpass").send_keys("password")
self.driver.find_element_by_name("userverify").send_keys("1234")
self.driver.find_element_by_class_name("Btn").click()
self.driver.find_element_by_link_text("商品管理").click()
self.driver.find_element_by_link_text("添加商品").click()
self.driver.switch_to.frame("mainFrame")
self.driver.find_element_by_name("name").send_keys("iphone13")
self.driver.find_element_by_id("1").click()
self.driver.find_element_by_id("2").click()
self.driver.find_element_by_id("6").click()
ActionChains(self.driver).double_click(self.driver.find_element_by_id("7")).perform()
brand=self.driver.find_element_by_name("brand_id")
Select(brand).select_by_value("1")
self.driver.find_element_by_class_name("button_search").click()
time.sleep(3)
new_good=self.driver.find_element_by_xpath("//*[@id='datagrid-row-r1-2-0']/td[1]/div").text
self.assertEqual("iphone13",new_good)
import time
from auto_test_frame.testcases.BaseTestCase import BaseTestCase
class AddVIPTest(BaseTestCase):
def test_addvip(self):
self.driver.get("http://localhost/index.php?m=admin&c=public&a=login")
self.driver.find_element_by_name("username").send_keys("admin")
self.driver.find_element_by_name("userpass").send_keys("password")
self.driver.find_element_by_name("userverify").send_keys("1234")
self.driver.find_element_by_class_name("Btn").click()
self.driver.find_element_by_link_text("会员管理").click()
self.driver.find_element_by_link_text("添加会员").click()
self.driver.switch_to.frame("mainFrame")
self.driver.find_element_by_name("username").send_keys("testvip3")
self.driver.find_element_by_name("mobile_phone").send_keys("13333765589")
self.driver.find_element_by_css_selector("[value='1']").click()
self.driver.find_element_by_id("birthday").send_keys("2020-02-01")
self.driver.find_element_by_name("email").send_keys("testvip3@163.com")
self.driver.find_element_by_name("qq").send_keys("444856473")
self.driver.find_element_by_class_name("button_search").click()
time.sleep(2)
new_vip=self.driver.find_element_by_xpath("//*[@id='datagrid-row-r1-2-0']/td[1]/div").text
print(new_vip)
import unittest2
import ddt
from auto_test_frame.func.CSVFileReader import reader
from auto_test_frame.testcases.BaseTestCase import BaseTestCase
@ddt.ddt
class RegisterTest(BaseTestCase):
table=reader("registerdata.csv")
@ddt.data(*table)
def test_register(self,row):
self.driver.get("http://127.0.0.1/index.php?m=user&c=public&a=reg")
self.driver.find_element_by_name("username").send_keys(row[0])
self.driver.find_element_by_name("password").send_keys(row[1])
self.driver.find_element_by_name("userpassword2").send_keys(row[2])
self.driver.find_element_by_name("mobile_phone").send_keys(row[3])
self.driver.find_element_by_name("email").send_keys(row[4])
self.driver.find_element_by_class_name("reg_btn").click()
welcome = self.driver.find_element_by_css_selector(".site-nav-right.fr>a:nth-child(1)").text
self.assertEqual("您好 "+row[0], welcome)
import time
import unittest2
import ddt
from auto_test_frame.func.CSVFileReader import reader
from auto_test_frame.testcases.BaseTestCase import BaseTestCase
@ddt.ddt
class LoginTest(BaseTestCase):
table=reader("logindata.csv")
@ddt.data(*table)
def test_login(self,row):
self.driver.get("http://127.0.0.1/index.php?m=user&c=public&a=login")
self.driver.find_element_by_id("username").send_keys(row[0])
self.driver.find_element_by_id("password").send_keys(row[1])
#time.sleep(3)
self.driver.find_element_by_css_selector(".login_btn.fl").click()
welcome = self.driver.find_element_by_css_selector(".site-nav-right.fr>a:nth-child(1)").text
self.assertEqual("您好 test", welcome)
读取文件数据
import csv
import os
def reader(filename):
list=[]
base_path=os.path.dirname(__file__)
path=base_path.replace("func","testdata/"+filename)
with open(path) as file:
table=csv.reader(file)
i=0
for row in table:
if i==0:
pass
else:
list.append(row)
i=i+1
return list
执行所有测试用例
import unittest2
from auto_test_frame.lib.HTMLTestRunner import HTMLTestRunner
if __name__ == '__main__':
suite=unittest2.defaultTestLoader.discover("./testcases","*Test.py")
path="report/TestReport.html"
file=open(path,'wb')
HTMLTestRunner(stream=file, verbosity=1,title="自动化测试练习报告",description="测试环境:Chrome", tester="lkx").run(suite)
代码全为本人练习python时产出,转载请注明出处。