#用例1:京东登陆 用例2:循环点击
# (单元测试) jdlogin.py :
#-*- coding:utf-8 -*-
# 导入单元测试包
import unittest
# 导入工具类
from util import firefoxutil,urlutil
# 导入控制类(C层)
from login.loginc import logincontrol
# 倒包登陆model层的包
from login.loginm import login_data
# 声明类 继承单元测试
class JdLogin(unittest.TestCase):
import unittest
# 导入工具类
from util import firefoxutil,urlutil
# 导入控制类(C层)
from login.loginc import logincontrol
# 倒包登陆model层的包
from login.loginm import login_data
# 声明类 继承单元测试
class JdLogin(unittest.TestCase):
# 实例化对象的方法
@classmethod
def setUpClass(self):
# 实例化对象
self.firefox = firefoxutil.Firefoxutil()
self.URL = urlutil.URL()
# 实例化控制对象
self.login = logincontrol.LoginControl(self.firefox)
# 实例化model层数据 也就是实例化对象
self.loginm = login_data.LoginData()
self.firefox = firefoxutil.Firefoxutil()
self.URL = urlutil.URL()
# 实例化控制对象
self.login = logincontrol.LoginControl(self.firefox)
# 实例化model层数据 也就是实例化对象
self.loginm = login_data.LoginData()
pass
# 测试用例执行之前执行的方法
def setUp(self):
def setUp(self):
# 打开浏览器
self.firefox.firefox_start(self.URL.JD_LOGIN)
self.firefox.firefox_start(self.URL.JD_LOGIN)
pass
# 测试用例执行之后执行的方法
def tearDown(self):
def tearDown(self):
# 关闭浏览器
self.firefox.firefox_close()
self.firefox.firefox_close()
pass
# # 测试用例, 注意如果不写测试用例,单元测试是不会运行的
# def test_us_pw(self):
#
# # MVC模式
# # m层 model层 在咱们代码里面对应咱们的测试用例层
# # view层 对应的是咱们的单元测试层
# # control 层就是咱们的逻辑代码层
#
# # 使用for循环,获取内容,同时断言
# for index in self.loginm.getData():
#
# # 注意获取出来的类型是uncode 类型,需要对类型进行编码,
# # 同时转类型,但是我们的输入框是支持unicode 类型,只需要对他编码就可以了
#
# self.login.LoginSendkeyUwPw(index[0].decode("UTF-8"),index[1].decode("UTF-8"))
#
# # 因为是for循环,所以每次我们登录的时候都需要设置休眠
# self.firefox.TimeSleep(firefoxutil.ENUMS.FIVE_TIME)
#
# # 断言,需要判断是成功登陆,还是失败的用例
# if int(index[3].decode("UTF-8")) == 0:
#
# # # 添加断言
# self.firefox.AssertClass(self,index[2].decode("UTF-8"),"msg-error")
#
# else:
#
# # 登陆成功以后,断言title
# self.firefox.AssertTitle(self,index[2].decode("UTF-8"))
#
#
#
# pass
# def test_us_pw(self):
#
# # MVC模式
# # m层 model层 在咱们代码里面对应咱们的测试用例层
# # view层 对应的是咱们的单元测试层
# # control 层就是咱们的逻辑代码层
#
# # 使用for循环,获取内容,同时断言
# for index in self.loginm.getData():
#
# # 注意获取出来的类型是uncode 类型,需要对类型进行编码,
# # 同时转类型,但是我们的输入框是支持unicode 类型,只需要对他编码就可以了
#
# self.login.LoginSendkeyUwPw(index[0].decode("UTF-8"),index[1].decode("UTF-8"))
#
# # 因为是for循环,所以每次我们登录的时候都需要设置休眠
# self.firefox.TimeSleep(firefoxutil.ENUMS.FIVE_TIME)
#
# # 断言,需要判断是成功登陆,还是失败的用例
# if int(index[3].decode("UTF-8")) == 0:
#
# # # 添加断言
# self.firefox.AssertClass(self,index[2].decode("UTF-8"),"msg-error")
#
# else:
#
# # 登陆成功以后,断言title
# self.firefox.AssertTitle(self,index[2].decode("UTF-8"))
#
#
#
# pass
# 点击 a标签的单元测试
def test_click_about_me(self):
def test_click_about_me(self):
# 使用for 循环
for index in self.loginm.get_click_about_me():
# 获取当前页面
current = self.firefox.getCurrentWindow()
current = self.firefox.getCurrentWindow()
print index[1].decode("UTF-8")
# 点击关于我们
self.firefox.ClickLink_switch_to_window(index[1].decode("UTF-8"))
self.firefox.ClickLink_switch_to_window(index[1].decode("UTF-8"))
# 设置休眠 网速慢
self.firefox.TimeSleep(firefoxutil.ENUMS.FIVE_TIME)
self.firefox.TimeSleep(firefoxutil.ENUMS.FIVE_TIME)
# 进行断言
if int(index[0].decode("UTF-8"))==0:
if int(index[0].decode("UTF-8"))==0:
self.f.AssertTitle(self,index[2].decode("UTF-8"))
else:
self.f.AssertTitle(self,index[2].decode("UTF-8")+", "+index[3].decode("UTF-8")+", "+index[4].decode("UTF-8"))
# 关闭当前页面
self.firefox.firefox_current()
self.firefox.firefox_current()
# 切换到登陆页面
self.firefox.driver.switch_to.window(current)
self.firefox.driver.switch_to.window(current)
pass
# (C层)logincontrol.py:
#-*- coding:utf-8 -*-
from util import firefoxutil
from util import firefoxutil
# 定义类继承object
class LoginControl(object):
# 类被实例化的时候执行的方法
# 对应的java 里面的构造函数
def __init__(self,firefox):
# self.firefox = firefoxutil.Firefoxutil()
#
self.firefox = firefox
#
self.firefox = firefox
pass
# 封装输入用户名和密码的方法
def LoginSendkeyUwPw(self,username,password):
def LoginSendkeyUwPw(self,username,password):
# 点击账号登陆
self.firefox.ClickClass("login-tab-r")
self.firefox.ClickClass("login-tab-r")
# 查找用户名和密码,以及点击登录
self.firefox.SendkeysID("loginname",username)
self.firefox.SendkeysID("nloginpwd",password)
self.firefox.SendkeysID("loginname",username)
self.firefox.SendkeysID("nloginpwd",password)
# 点击登陆按钮
self.firefox.ClickID("loginsubmit")
self.firefox.ClickID("loginsubmit")
pass
# (M层)login_data.py :
#-*- coding:utf-8 -*-
# 导入csv文件
import csv
# 导入os包
import os
import csv
# 导入os包
import os
# 声明类继承object
class LoginData(object):
class LoginData(object):
# 读取登陆测试用例的文件的方法
# 面试题: 你写测试用例或者看测试用例的时候,如果知道这条测试有能力能不能写自动化
# 可以在测试用例里面加入一个类型,通过类型判断能不能写成自动化脚本
def getData(self):
# 面试题: 你写测试用例或者看测试用例的时候,如果知道这条测试有能力能不能写自动化
# 可以在测试用例里面加入一个类型,通过类型判断能不能写成自动化脚本
def getData(self):
# 指定读写路径
# 获取当前路径,如果在suit运行,当前路径就是suit的路径,也就是说在那个类运行,获取的当前路径就是那个类的路径
current_file = os.getcwd()
# 指定现在文件的路径
files = os.path.dirname(current_file)+"/login/loginm/1509E1.csv"
current_file = os.getcwd()
# 指定现在文件的路径
files = os.path.dirname(current_file)+"/login/loginm/1509E1.csv"
# 打开文件
# 面试题: open 与 file 方法的区别
# open 是Python 新增的语法,file 是老语法
filename = open(files,'rb')
# 面试题: open 与 file 方法的区别
# open 是Python 新增的语法,file 是老语法
filename = open(files,'rb')
# 通过 csv读取出出来
data = csv.reader(filename)
return data
# 登陆页面点击所有连接的的方法
def get_click_about_me(self):
# 指定读写路径
# 获取当前路径,如果在suit运行,当前路径就是suit的路径,也就是说在那个类运行,获取的当前路径就是那个类的路径
current_file = os.getcwd()
# 指定现在文件的路径
files = os.path.dirname(current_file) + "/login/loginm/jdlogin_foot.csv"
current_file = os.getcwd()
# 指定现在文件的路径
files = os.path.dirname(current_file) + "/login/loginm/jdlogin_foot.csv"
# 打开文件
# 面试题: open 与 file 方法的区别
# open 是Python 新增的语法,file 是老语法
filename = open(files, 'rb')
# 面试题: open 与 file 方法的区别
# open 是Python 新增的语法,file 是老语法
filename = open(files, 'rb')
# 通过 csv读取出出来
data = csv.reader(filename)
return data
# (读取)CSV:
#1509E1.csv
,,请输入账户名和密码,0 18301585363,,请输入密码,0 18301585363,1,账户名与密码不匹配,请重新输入,0 15284391655,fei961216,京东(JD.COM)-正品低价、品质保障、配送及时、轻松购物!,1
#jdlogin_foot.csv
0,关于我们,企业简介-京东商城 0,联系我们,联系我们-京东商城 0,人才招聘,京东招聘官网 0,商家入驻,商家入驻-入驻流程 - 京东全品类专题活动-京东 0,广告服务,广告服务 - 京东全品类专题活动-京东 0,手机京东,手机京东 - 京东 0,友情链接,友情链接 0,销售联盟,京东联盟 0,京东社区,京东社区 - 京东电脑、办公|游戏设备专题活动-京东 0,京东公益,京东公益 1,English Site,JD.com Global Online Shopping Site: Online Shopping for Electronics,Clothing,Toys and More
# (运行)suit.py:
#-*- coding:utf-8 -*- import unittest from unit import unit,shopcar,jdlogin import HTMLTestRunner import os import time # 设置系统编码格式 import sys # 重载系统 reload(sys) # 设置编码格式 sys.setdefaultencoding("UTF-8") import smtplib from email.mime.text import MIMEText from email.header import Header # 倒包添加附件 from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart suit=unittest.TestSuite() #suit.addTest(unittest.makeSuite(unit.Login)) #suit.addTest(unittest.makeSuite(shopcar.ShopCar)) suit.addTest(unittest.makeSuite(jdlogin.JdLogin)) #设置生成时间 #times=time.strftime("%Y-%m-%d%H:%M:%S",time.localtime()) #files=os.getcwd()+"/jd.html" files=os.getcwd()+"/jd3.html" filename=open(files,'wb') runner=HTMLTestRunner.HTMLTestRunner(stream=filename,title=u"京东",description=u"京东测试用例") runner.run(suit) #关流 filename.close() # send = "18301585363@163.com" # recever1 = "1633909553@qq.com" # title="生活不止眼前的苟且,还有诗和远方的田野" # emin="smtp.163.com" # zh="18301585363@163.com" # mm="gaoxuejun123" # files1="jd.html" # # filename1=open(files1,"rb") # # emin_name=filename1.read() # # filename1.close() # # msg = MIMEText(emin_name,_subtype="html",_charset="UTF-8") # # msg['Subject'] = Header(title,"UTF-8") # # msg['From'] = send # msg['To'] = recever1 # # smtp=smtplib.SMTP() # # smtp.connect(emin) # # smtp.login(zh,mm) # # smtp.sendmail(send,recever1,msg.as_string()) # # smtp.quit()