精华内容
下载资源
问答
  • 自动登录武汉理工大学鉴湖宿舍校园网的方式-python代码及exe程序编程起因简单固定代码程序...幸好会一点python,就想着能不能方便一点,写个代码,再个开机自动运行。 简单固定代码程序 把用户名和密码换一下,可以

    编程起因

    在这里插入图片描述

    每次打开电脑都要进浏览器输密码,真的烦。
    而且我的浏览器还不能自己保存。哭了
    难过

    幸好会一点python,就想着能不能方便一点,写个代码,再加个开机自动运行。

    简单固定代码程序

    用户名和密码换一下,可以直接在VS等编辑器保存运行PY文件。

    import requests
    import base64
    import os
    import sys
    
    
    def connect():
    
        username = '301451' # 更改为自己对应的卡号
        password = '1234556'  # 更改为自己对应的密码
        mac = '80-74-41-EA-4E-BE' # 更改为自己对应的mac地址
        print('校园卡号'+username, '\n校园网密码'+password)
    
        s = requests.session()
    
        res1 = s.post(
            url=r"http://172.30.16.34/srun_portal_pc.php?ac_id=1&",
            headers={
                "Accept": "*/*",
                "Accept-Encoding": "gzip, deflate",
                "Accept-Language": "zh-CN",
                "Cache-Control": "no-cache",
                "Connection": "Keep-Alive",
                "Content-Length": "109",
                "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
                "Cookie": r"login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcrvEe0UJsHZAaiCmY%252FDhrV2LGMuD3%252BcoyqSZ2EWX584sBybRJ9yo2fv1XBj03H9tPWkZeCauuZKGqBXEvY5Uj7c%252B7RAja6qTtMcfLVPUy%252BTpeX6WFL8ryAHkNUIMIRg8fKaHI8f1CqUBByT11ck7D3sVZEYQ88AMlEwvMxx3HvMShfJB0D4Kc5OdM3Wug3NB5WkHD3C87eiKEs8zw%253D%253D; login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcrvEe0UJsHZAaiCmY%252FDhrV2LGMuD3%252BcoyqSZ2EWX584sBybRJ9yo2fv1XBj03H9tPWkZeCauuZKGqBXEvY5Uj7c%252B7RAja6qTtMcfLVPUy%252BTpeX6WFL8ryAHkNUIMIRg8fKaHI8f1CqUBByT11ck7D3sVZEYQ88AMlEwvMxx3HvMShfJB0D4Kc5OdM3Wug3NB5WkHD3C87eiKEs8zw%253D%253D; NSC_tsvo_4l_TH=ffffffffaf160e3b45525d5f4f58455e445a4a423660",
                "Host": "172.30.16.34",
                "Referer": "http://172.30.16.34/srun_portal_pc.php?ac_id=1&",
                "User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)",
            },
            data={
                "ac_id": "64",
                "action": "login",
                "ajax": "1",
                "nas_ip": '',
    
    
                "password": password,
                "save_me": "1",
                "user_ip": '',
    
    
                "user_mac": mac,
                "username": username,
            },
    
    
    
    
        )
    
    
    if __name__ == "__main__":
        # connect()
        connect()
        print('登陆成功!')
    
    

    在这里插入图片描述

    简单GUI-手动登录界面(Tkinter模块实现)

    一.功能想法

    1. 可以自己输入卡号和密码
    2. 能记住卡号和密码
    3. 判别登录(联网)状态

    二.编程实现

    以下代码表单信息data中的user_mac应该手动改为自己的mac地址,函数自动获取的不对。
    mac = '90-78-41-EA-2E-BE'
    在这里插入图片描述

    1.窗口界面

    window = tk.Tk()
    window.title('校园网登陆器')
    
    window.geometry('400x250')
    
    
    var2 = tk.StringVar()
    
    var = '欢迎使用本软件,@haost'
    l_0 = tk.Label(window, text=var,
                   font=('Arial', 12), width=35, height=2)
    l_0.pack()
    l_1 = tk.Label(window, text='请输入校园卡号:', anchor='w',
                   font=('Arial', 13), width=30, height=2).place(x=-5, y=30)
    
    e1 = tk.Entry(window, show=None)
    
    e1.pack()
    l_2 = tk.Label(window, text=' 请输入密码:',
                   font=('Arial', 13), width=30, height=1).place(x=-60, y=60)
    
    e2 = tk.Entry(window, show='*')
    e2.pack()
    readfile()
    added_thread = threading.Thread(
        target=get_id, args=(e1.get(), e2.get()), name='T1')
    
    
    b1 = tk.Button(window, text='登陆/注销', width=15,
                   height=2, command=connect).place(x=140, y=90)
    
    var2 = tk.StringVar()
    l2 = tk.Label(window, textvariable=var2,
                  font=('Arial', 11), width=35, height=5).place(x=24, y=140)
    
    window.mainloop()
    

    2.各类模块

    def isConnected(): #判断是否联网
    
        try:
            html = requests.get("http://www.baidu.com", timeout=2)
            html = str(html.content)
            flag = html.find('www.hao123.com')
           
            if flag >= 0:
                return 1
            else:
                return 0
        except:
            return False
    
    def get_mac_address(): #取得MAC地址
       
        import sys
        import os
        mac = None
        if sys.platform == "win32":
            for line in os.popen("ipconfig /all"):
                # print(line)
                if line.lstrip().startswith("Physical Address"):
                    mac = line.split(":")[1].strip().replace("-", ":")
                    break
        else:
            for line in os.popen("/sbin/ifconfig"):
                if 'Ether' in line:
                    mac = line.split()[4]
                    break
        return mac
    
    
    on_hit = False
    
    
    def jiami(password1): #将密码base64加密
    
        # 想将字符串转编码成base64,要先将字符串转换成二进制数据
        y_password = password1
        bytes_url = y_password.encode("utf-8")
        h_password = base64.b64encode(bytes_url)
        h_password = r'{B}'+str(h_password)[2:-1]  # 被编码的参数必须是二进制数据
        print('base64加密后:'+h_password)
        return h_password
        
    def mimasave(username, password): #将登录数据保存进文件
       
        f = open("foo.ini", "w+")
        str = f.read()
      
        name = f.write('\n用户名为:'+username+'\n')
      
        psd = f.write('密码为:'+password+'\n')
        f.close()
        print('恭喜你,用户保存成功。在本文件夹下f00.ini中。\n' +
              'name:'+username+'\npassword:'+password)
    
    
    def connect(): #发包连接
       
        mimasave(e1.get(), e2.get())
        get_id(e1.get(), e2.get())
        
        var2.set('恭喜你,登陆成功!!(用户信息已保存)' +
                 '\nname:'+e1.get()+'\npassword:'+e2.get())
        s = requests.session()
       
        res1 = s.post(
            url=r"http://172.30.16.34/srun_portal_pc.php?ac_id=1&",
            headers={
                "Accept": "*/*",
                "Accept-Encoding": "gzip, deflate",
                "Accept-Language": "zh-CN",
                "Cache-Control": "no-cache",
                "Connection": "Keep-Alive",
                "Content-Length": "109",
                "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
                "Cookie": r"login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcrvEe0UJsHZAaiCmY%252FDhrV2LGMuD3%252BcoyqSZ2EWX584sBybRJ9yo2fv1XBj03H9tPWkZeCauuZKGqBXEvY5Uj7c%252B7RAja6qTtMcfLVPUy%252BTpeX6WFL8ryAHkNUIMIRg8fKaHI8f1CqUBByT11ck7D3sVZEYQ88AMlEwvMxx3HvMShfJB0D4Kc5OdM3Wug3NB5WkHD3C87eiKEs8zw%253D%253D; login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcrvEe0UJsHZAaiCmY%252FDhrV2LGMuD3%252BcoyqSZ2EWX584sBybRJ9yo2fv1XBj03H9tPWkZeCauuZKGqBXEvY5Uj7c%252B7RAja6qTtMcfLVPUy%252BTpeX6WFL8ryAHkNUIMIRg8fKaHI8f1CqUBByT11ck7D3sVZEYQ88AMlEwvMxx3HvMShfJB0D4Kc5OdM3Wug3NB5WkHD3C87eiKEs8zw%253D%253D; NSC_tsvo_4l_TH=ffffffffaf160e3b45525d5f4f58455e445a4a423660",
                "Host": "172.30.16.34",
                "Referer": "http://172.30.16.34/srun_portal_pc.php?ac_id=1&",
                "User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)",
            },
            data={
                "ac_id": "64",
                "action": "login",
                "ajax": "1",
                "nas_ip": '',
    
    
                "password": jiami(e2.get()),
                "save_me": "1",
                "user_ip": '',
    
    
                "user_mac": get_mac_address(),
                "username": e1.get(),
            },
          
    
        )
    def readfile(): #读取当前文件夹下的foo.ini文件
    
        try:
            f = open("foo.ini", "r+")
            for line in f:
                accout_id = line.find('用户名为:')
                pass_id = line.find('密码为:')
              
    
                if accout_id != -1:
                    name_1 = line[5:-1]
                if pass_id != -1:
                    password2 = line[4:-1]
    
            e1.insert('insert', name_1)
            e2.insert('insert', password2)
    
            f.close()
        except:
            pass
    

    可以在程序文件夹下的foo.ini文本内看到保存的卡号和密码。(www,其实是不会数据库,只会文本,以后再学吧。)
    123

    3.完整代码

    import sys
    import os
    import tkinter as tk
    import base64
    import requests
    import json
    
    
    # @haost
    def isConnected():
    
        try:
            html = requests.get("http://www.baidu.com", timeout=2)
            html = str(html.content)
            flag = html.find('www.hao123.com')
            
            if flag >= 0:
                return 1
            else:
                return 0
        except:
            return False
    
    
    def get_mac_address():
    
        mac = None
        if sys.platform == "win32":
            for line in os.popen("ipconfig /all"):
                # print(line)
                if line.lstrip().startswith("Physical Address"):
                    mac = line.split(":")[1].strip().replace("-", ":")
                    break
        else:
            for line in os.popen("/sbin/ifconfig"):
                if 'Ether' in line:
                    mac = line.split()[4]
                    break
        return mac
    
    
    def jiami(password1):
    
        # 想将字符串转编码成base64,要先将字符串转换成二进制数据
        y_password = password1
        bytes_url = y_password.encode("utf-8")
        h_password = base64.b64encode(bytes_url)
        h_password = r'{B}'+str(h_password)[2:-1]  # 被编码的参数必须是二进制数据
        print('base64加密后:'+h_password)
        return h_password
    
    
    def mimasave(username, password):
        
        f = open("foo.ini", "w+")
        str = f.read()
       
        name = f.write('\n用户名为:'+username+'\n')
       
        psd = f.write('密码为:'+password+'\n')
        f.close()
        print('恭喜你,用户保存成功。在本文件夹下f00.ini中。\n' +
              'name:'+username+'\npassword:'+password)
    
    
    def connect():
       
        mimasave(e1.get(), e2.get())
    
        s = requests.session()
        res1 = s.post(
            url=r"http://172.30.16.34/srun_portal_pc.php?ac_id=1&",
            headers={
                "Accept": "*/*",
                "Accept-Encoding": "gzip, deflate",
                "Accept-Language": "zh-CN",
                "Cache-Control": "no-cache",
                "Connection": "Keep-Alive",
                "Content-Length": "109",
                "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
                "Cookie": r"login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcrvEe0UJsHZAaiCmY%252FDhrV2LGMuD3%252BcoyqSZ2EWX584sBybRJ9yo2fv1XBj03H9tPWkZeCauuZKGqBXEvY5Uj7c%252B7RAja6qTtMcfLVPUy%252BTpeX6WFL8ryAHkNUIMIRg8fKaHI8f1CqUBByT11ck7D3sVZEYQ88AMlEwvMxx3HvMShfJB0D4Kc5OdM3Wug3NB5WkHD3C87eiKEs8zw%253D%253D; login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcrvEe0UJsHZAaiCmY%252FDhrV2LGMuD3%252BcoyqSZ2EWX584sBybRJ9yo2fv1XBj03H9tPWkZeCauuZKGqBXEvY5Uj7c%252B7RAja6qTtMcfLVPUy%252BTpeX6WFL8ryAHkNUIMIRg8fKaHI8f1CqUBByT11ck7D3sVZEYQ88AMlEwvMxx3HvMShfJB0D4Kc5OdM3Wug3NB5WkHD3C87eiKEs8zw%253D%253D; NSC_tsvo_4l_TH=ffffffffaf160e3b45525d5f4f58455e445a4a423660",
                "Host": "172.30.16.34",
                "Referer": "http://172.30.16.34/srun_portal_pc.php?ac_id=1&",
                "User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)",
            },
            data={
                "ac_id": "64",
                "action": "login",
                "ajax": "1",
                "nas_ip": '',
    
    
                "password": jiami(e2.get()),
                "save_me": "1",
                "user_ip": '',
    
    
                "user_mac": get_mac_address(),
                "username": e1.get(),
            },
    
    
        )
        if isConnected():
            var2.set('恭喜你,登陆成功!!(用户信息已保存)' + '\nname:' +
                     e1.get()+'\npassword:'+e2.get())
        else:
            var2.set('登录失败!!(用户信息已保存)' + '\nname:' +
                     e1.get()+'\npassword:'+e2.get())
    
    
    def disconnect():
    
        var2.set('恭喜你,注销成功!!')
        response = requests.post(
            url=r"http://172.30.16.34/srun_portal_pc.php?ac_id=1&",
            headers={
                "Accept": "*/*",
                "Accept-Encoding": "gzip, deflate",
                "Accept-Language": "zh-CN",
                "Cache-Control": "no-cache",
                "Connection": "Keep-Alive",
                "Content-Length": "109",
                "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
                "Cookie": r"login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcrvEe0UJsHZAaiCmY%252FDhrV2LGMuD3%252BcoyqSZ2EWX584sBybRJ9yo2fv1XBj03H9tPWkZeCauuZKGqBXEvY5Uj7c%252B7RAja6qTtMcfLVPUy%252BTpeX6WFL8ryAHkNUIMIRg8fKaHI8f1CqUBByT11ck7D3sVZEYQ88AMlEwvMxx3HvMShfJB0D4Kc5OdM3Wug3NB5WkHD3C87eiKEs8zw%253D%253D; login=bQ0pOyR6IXU7PJaQQqRAcBPxGAvxAcrvEe0UJsHZAaiCmY%252FDhrV2LGMuD3%252BcoyqSZ2EWX584sBybRJ9yo2fv1XBj03H9tPWkZeCauuZKGqBXEvY5Uj7c%252B7RAja6qTtMcfLVPUy%252BTpeX6WFL8ryAHkNUIMIRg8fKaHI8f1CqUBByT11ck7D3sVZEYQ88AMlEwvMxx3HvMShfJB0D4Kc5OdM3Wug3NB5WkHD3C87eiKEs8zw%253D%253D; NSC_tsvo_4l_TH=ffffffffaf160e3b45525d5f4f58455e445a4a423660",
                "Host": "172.30.16.34",
                "Referer": "http://172.30.16.34/srun_portal_pc.php?ac_id=1&",
                "User-Agent": "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; Tablet PC 2.0)",
            },
            data={
    
    
                "action": "logout",
                "ajax": "1",
    
                "password": e2.get(),
    
    
                "username": e1.get(),
            },
    
    
        )
    
    
    def readfile():
    
        try:
            f = open("foo.ini", "r+")
            for line in f:
                accout_id = line.find('用户名为:')
                pass_id = line.find('密码为:')
    
                if accout_id != -1:
                    name_1 = line[5:-1]
                if pass_id != -1:
                    password2 = line[4:-1]
    
            e1.insert('insert', name_1)
            e2.insert('insert', password2)
    
            f.close()
        except:
            pass
    
    
    window = tk.Tk()
    window.title('鉴湖宿舍校园网登陆器')
    
    window.geometry('400x250+400+200')
    
    
    var2 = tk.StringVar()
    
    var = '欢迎使用本软件  @haost'
    l_0 = tk.Label(window, text=var,
                   font=('Arial', 12), width=35, height=2)
    l_0.pack()
    l_1 = tk.Label(window, text='请输入校园卡号:', anchor='w',
                   font=('Arial', 13), width=30, height=2).place(x=-5, y=30)
    # l_1.pack()
    e1 = tk.Entry(window, show=None)
    
    e1.pack()
    l_2 = tk.Label(window, text=' 请输入密码:',
                   font=('Arial', 13), width=30, height=1).place(x=-60, y=60)
    # l_2.pack()
    e2 = tk.Entry(window, show='*')
    e2.pack()
    readfile()
    
    
    b1 = tk.Button(window, text='登陆/注销', width=15,
                   height=2, command=connect).place(x=140, y=90)
    
    var2 = tk.StringVar()
    l2 = tk.Label(window, textvariable=var2,
                  font=('Arial', 11), width=35, height=5).place(x=24, y=140)
    
    window.mainloop()
    
    
    

    4.效果

    ’'丑的很,将就着吧'

    5.实现运行即自动登录

    只需要在最后的window.mainloop()前面一行加上connect()就可以了。

    实现开机自动登录

    我们可以将py文件或者exe文件(后面有转换方法)设成开机自动启动。
    方法为:

    Created with Raphaël 2.2.0开始:在“运行”程序中输入“shell:startup”可进入开机启动文件夹。如果想要添加启动项,可以将软件移入开机启动文件夹中。可以在任务管理器中查看是否成功添加开机启动项。结束:如果开机后电脑在程序运行前连接到校园网就能成功。

    推荐使用 ***简单固定代码程序***进行自启。

    附加:将python 文件转换为exe文件

    请参考Python PyInstaller安装和使用教程(详解版)
    例如python pyinstaller.py -w -F hello.py
    这样在没有python环境的电脑上也能用软件了。

    结语

    只会C语言和python,用c语言太难,所以用python写了个,其实开始没想用gui的,后来越学越多,索性就用了。
    果然,实践的进步是最大的,不过还是得重视基础。
    过程中用了许多博主的插件方法,比如base64加密,判断联网,获取MAC地址等。
    还有这种保存的方式自己都觉得笨,以后得学个好的。
    这是第一篇文章,主要是用来记录,记录编程的一个阶段。也算为以后留下一点痕迹吧。
    各位再见。
    睡了

    展开全文
  • 一、项目框架如图: ...2、result:存放每次运行的log和测试报告 3、testcase:这个包放test开头的测试用例 4、testFile:这个包放接口上传的图片(如注册需要上传头像),excel管理的接口参数 5、caselist.tx...

    一、项目框架如图:

    1、common :这个包都是一些公共的方法,如:手机号加解密,get/post接口请求的方法封装,接口鉴权,发邮件,读写excel文件方法等等

    2、result:存放每次运行的log和测试报告

    3、testcase:这个包放test开头的测试用例

    4、testFile:这个包放接口上传的图片(如注册需要上传头像),excel管理的接口参数

    5、caselist.txt:需要运行的用例

    6、config.ini :放一些配置信息,如发邮件的房间账户,接口需要使用的固定参数和版本,发送邮件的开关,以及动态的数据,如动态更改了就将最新的写在这个配置里面,其他地方需要用的就从配置文件里面取最新生成的。

    7、readConfig.py :操作配置文件的一些方法,获取数据,修改数据等

    8、runAll.py:运行所有用例 

    2、excel表里面的参数:

      后面这个code和msg是预期结果,用例里面会获取实际结果,然后跟这个预期结果比较判断接口是否成功。

     

    3、接口的写法

    接口是采用参数化实现的,传入不用的参数对比不同的结果

    aes = aesCryter.AesCrypter()
    authen= authentication.getAuthentication()
    login_xls = commons.get_xls("userCase.xlsx", "login")
    localReadConfig = readConfig.ReadConfig()
    configHttp = ConfigHttp.ConfigHttp()
    info = {}
    
    @paramunittest.parametrized(*login_xls)
    class Login(unittest.TestCase):
        def setParameters(self, case_name,url, method, token, par, code, msg):
            self.case_name = str(case_name)
            self.url = str(url)
            self.method = str(method)
            self.token = str(token)
            self.par = eval(str(par))
            self.code = str(code)
            self.msg = str(msg)
            self.return_json = None
            self.info = None
    
        def setUp(self):
            self.log = Log.MyLog.get_log()
            self.logger = self.log.get_logger()
            print(self.case_name+"测试开始前准备")
    
        def testLogin(self):
            get_url = authen.get_Url("userCase.xlsx", "login",0,1)
            ydtoken = authen.get_ydtoken(url = get_url)        #获取ydtoken
            new_url =localReadConfig.get_http('url')+get_url+"&ydtoken="+ydtoken  #拼接接口的请求链接
            configHttp.set_url(new_url)
            print("第一步:设置url  "+new_url)
    
            # get visitor token
            if self.token == '0':
                token_v = None
            elif self.token == '1':
                businessCommon.set_visitor_token_to_config()
                token_v = localReadConfig.get_headers('token_v')
                header = {"cookie": "SSO=%s" % str(token_v)}
                configHttp.set_headers(header)
            print("第二步:设置header(token等)")
    
            # set params
            data =self.par
            data['mobile'] = aes.encrypt(str(data['mobile']))          #对手机号和密码继续加密
            data['password'] = aes.encrypt(str(data['password']))
            data["token"] = str(token_v)
            configHttp.set_data(data)
            print("第三步:设置发送请求的参数")
    
            # test interface
            self.return_json = configHttp.post()
            print(self.return_json)
            print("第四步:发送请求方法")
    
            # check result
            self.checkResult()
            print("第五步:检查结果")
    
        def tearDown(self):
            """
    
            :return:
            """
            self.log.build_case_line(self.case_name, actualcode, actualmsg)
            print("测试结束,输出log完结\n\n")
    
        def checkResult(self):
            """
            check test result
            :return:
            """
            global actualcode,actualmsg
            actualcode = commons.get_value_from_return_json(self.return_json, 'code')
            print('实际code:%s'%actualcode)
            actualmsg = commons.get_value_from_return_json(self.return_json, 'msg')
            print('实际msg:%s'%actualmsg)
            self.assertEqual(actualcode, self.code)
            self.assertEqual(actualmsg, self.msg)
    
    
    if __name__ == '__main__':
        unittest.main

    4、接口关联,

    接口和接口之间有这依赖关系,必须上一个接口请求完成,后面这个接口才能才能,所以在common公共包里面写了一个通用的方法,如果涉及到有依赖关系的,就调用这个接口,把需要先请求的接口先完成了,再请求要测试的接口

    比如:接下来这个忘记密码接口,更改密码,必须先请求发送验证码接口,再请求验证已验证接口,最后才能请求更改密码接口

    import unittest
    import paramunittest
    import readConfig as readConfig
    from common import Log as Log
    from common import commons
    from common import configHttp as ConfigHttp
    from common import businessCommon
    from common import get_Authentication as authentication
    
    
    authen= authentication.getAuthentication()
    forgotcheck = commons.get_xls("userCase.xlsx", "forgotcheck")
    localReadConfig = readConfig.ReadConfig()
    configHttp = ConfigHttp.ConfigHttp()
    info = {}
    
    
    @paramunittest.parametrized(*forgotcheck)
    class ForgotCheck(unittest.TestCase):
        def setParameters(self, case_name, url,method, token, par, code, msg):
            self.case_name = str(case_name)
            self.url = str(url)
            self.method = str(method)
            self.token = str(token)
            self.par = eval(str(par))
            self.code = str(code)
            self.msg = str(msg)
            self.return_json = None
            self.info = None
    
    
        def setUp(self):
            self.log = Log.MyLog.get_log()
            self.logger = self.log.get_logger()
            print(self.case_name+"测试开始前准备")
    
        def testforgotcheck(self):
            # set url
            get_url = authen.get_Url("userCase.xlsx", "forgotcheck", 0, 1)
            ydtoken = authen.get_ydtoken(url=get_url)  # 获取ydtoken
            new_url = localReadConfig.get_http('url') + get_url + "&ydtoken=" + ydtoken  # 拼接鉴权的请求链接
            configHttp.set_url(new_url)
            print("第一步:设置url  " + new_url)
    
            # get visitor token
            if self.token == '0':
                token_v = None
            elif self.token == '1':
                businessCommon.set_visitor_token_to_config()
                token_v = localReadConfig.get_headers('token_v')
                header = {"cookie": "SSO=%s" % str(token_v)}
                configHttp.set_headers(header)
            print("第二步:设置header(token等)")
    
            # set params
            data = self.par
            data["token"] = str(token_v)
            configHttp.set_data(data)
            print("第三步:设置发送请求的参数")
    
            # test interface
            self.return_json = configHttp.post()
            print("第四步:发送请求方法")
    
            # check result
            self.checkResult()
            print("第五步:检查结果")
    
        def tearDown(self):
            """
    
            :return:
            """
            self.log.build_case_line(self.case_name, actualcode, actualmsg)
            print("测试结束,输出log完结\n\n")
    
        def checkResult(self):
            """
            check test result
            :return:
            """
            global actualcode,actualmsg
            actualcode = commons.get_value_from_return_json(self.return_json, 'code')
            print('实际code:%s'%actualcode)
            actualmsg = commons.get_value_from_return_json(self.return_json, 'msg')
            print('实际msg:%s'%actualmsg)
            self.assertEqual(actualcode, self.code)
            self.assertEqual(actualmsg.strip(), self.msg)

    5、控制接口是否需要运行 ,每次新增用例把用例名字写在这个 caselist.txt  ,不需要运行就注释即可。

    #reqSer/test_001_getRequst
    #reqSer/test_002_addRequst
    #reqSer/test_003_userRadar
    user/test_001_Login
    #user/test_002_Sign_sms
    #user/test_003_Forgotsms
    #user/test_004_Forgotcheck
    #user/test_005_forgotpass
    #user/test_006_NoParameterization

    6、运行所有用例 runAll.py

    import os
    import unittest
    from common.Log import MyLog as Log
    import readConfig as readConfig
    from common import  HTMLTestRunner
    from common.configEmail import MyEmail
    
    localReadConfig = readConfig.ReadConfig()
    
    
    class AllTest:
        def __init__(self):
            global log, logger, resultPath, on_off
            log = Log.get_log()
            logger = log.get_logger()
            resultPath = log.get_report_path()
            print(resultPath)
            on_off = localReadConfig.get_email("on_off")
            self.caseListFile = os.path.join(readConfig.proDir, "caselist.txt")
            self.caseFile = os.path.join(readConfig.proDir, "testCase")
            # self.caseFile = None
            self.caseList = []
            self.email = MyEmail.get_email()
    
        def set_case_list(self):
            """
            set case list
            :return:
            """
            fb = open(self.caseListFile)
            for value in fb.readlines():
                data = str(value)
                if data != '' and not data.startswith("#"):
                    self.caseList.append(data.replace("\n", ""))
            fb.close()
    
        def set_case_suite(self):
            """
            set case suite
            :return:
            """
            self.set_case_list()
            test_suite = unittest.TestSuite()
            suite_module = []
    
            for case in self.caseList:
                case_name = case.split("/")[-1]
                print(case_name+".py")
                discover = unittest.defaultTestLoader.discover(self.caseFile, pattern=case_name + '.py', top_level_dir=None)
                suite_module.append(discover)
    
            if len(suite_module) > 0:
    
                for suite in suite_module:
                    for test_name in suite:
                        test_suite.addTest(test_name)
            else:
                return None
            return test_suite
    
        def run(self):
            """
            run test
            :return:
            """
            try:
                suit = self.set_case_suite()
                if suit is not None:
                    logger.info("********TEST START********")
                    fps = open(resultPath, 'wb')
                    runner = HTMLTestRunner.HTMLTestRunner(stream=fps, title='Test Report', description='Test Description')
                    runner.run(suit)
                else:
                    logger.info("Have no case to test.")
            except Exception as ex:
                logger.error(str(ex))
            logger.info("*********TEST END*********")
            fps.close()
            # send test report by email
            if on_off == 'on':
                self.email.send_email()
            elif on_off == 'off':
                logger.info("Doesn't send report email to developer.")
            else:
                logger.info("Unknow state.")
    
    
    if __name__ == '__main__':
        obj = AllTest()
        obj.run()

    6、生成的报告:

    7、发送邮件,邮件附件是report和log,所以压缩了一下。

     

    转载于:https://www.cnblogs.com/guo2733/p/10552255.html

    展开全文
  • python基础知识1 在这里我们首先说一下学习方法: 1.练习课堂所讲知识点(视频...总结:能够按照程序运行自动、高速处理数据的现代化智能电子设备。 计算机的组成: 硬件(鼠标、键盘…)+软件(系统、应用) 2.计算

    python基础知识1–计算机要点

    在这里我们首先说一下学习方法:
    1.练习课堂所讲知识点(视频和源码(模仿)敲1遍、视频和源码(脱离)敲2遍、自己(主动)再敲1遍)
    2.每次记录所学知识点,加强记忆。++复习使用 ++亮点
    3.通过作业检验自己

    1.计算机的基本概念

    • 计算机的概念:电脑,现代一种用于高速计算的电子计算机器。
    • 计算机的特点:数值计算、存储记忆、逻辑计算(思维、规则)。
    • 总结:能够按照程序运行、自动、高速处理数据的现代化智能电子设备。
    • 计算机的组成:
      硬件(鼠标、键盘…)+软件(系统、应用)

    2.计算机语言的概念

    • 1.人和计算机通信的语言
    • 2.计算机语言的发展
      机器语言->汇编语言->高级计算机语言
      机器语言:0、1二进制
      汇编语言:简单地字母和符号串代替二进制串,提高语言的记忆性和识别性
      高级计算机语言:一些列指令的集合JAVA 、C、C++、 Python

    3.交互方式

    3.1交互方式的种类
    	tui命令行交互方式(特点2:需要控制台,需要命令)
    	gui图形界面交互方式
    	共同点:interface接口,用户通过接口来使用软件
    3.2文本交互模式的打开方式:
    Windows+R->cmd->dos命令
    备注:常见dos
    dir列出当前目录下的文件名
    md创建目录
    rd删除目录
    cd进入指定目录
    cd..返回上一级
    cd/返回根目录
    del删除文件
    exit退出dos命令
    

    4.文件和字符集

    4.1文本文件

    • 纯文本:只能保存单一文本内容,例如记事本
    • 富文本:能很多类型,例Word
      将字符转换为二进制码的过程,编码encode()
      将二进制码转化为字符的过程,解码decode()
      备注:联想于发报员,电报,接报员
      4.2常见的字符集
    • ASCII 美国人编码 使用7位来对美国常用的字符进行编码 包含128个字符
    • ISO-8859-1欧洲编码 使用8位来编码包含256个字符
    • GBK 中国人编码(国标码)
    • Unicode 万国码 包含世界上所有语言和字符 编写程序一般都使用万国码
      常见:UTF-8(最常用)字符范围最大(1-5) UTF-16(2-4) UTF-32(3-4)
      备注:写代码出现乱码,检查字符集

    5.进制

    计算机底层用二进制表示,基本位数8位,为简化,出现进制。
    5.1进制间的换算2、5、8、16
    5.2进制的计数
    十进制:满十进一(0123456789)例:0 1 2 …9 10 11 12 13 …15…17…20 21…
    二进制:满二进一(0 1)(面试)例:0 1 10 11 100 101 110 111…
    八进制:满八进一 (01234567)例:0 1 2 3 4 5 6 7 10 11 … 17 20 21 22…27 30 31…
    十六进制:满16进一(0123456789 A10B11C12 D13 E14 F15)例:0…8 9 A B…F 10(16)11(17)…19(19+6=25)1a(26) 1b(27) 同:A\a
    5.3数据间换算
    计算机最小单位1bit(位)
    我们可以操作的最小单位byte(字节)
    换算
    1byte=8bit
    1kb=1024byte
    1mb=1024kb
    1gb=1024mb
    1tb=1024gb
    好了,知识点到此结束。我们下次再见!

    展开全文
  • 注意这里的X是真实数据前了一列1,因为有theta(0) 2、梯度下降算法 代价函数对求偏导得到: 所以对theta的更新可以写为: 其中为学习速率,控制梯度下降的速度,一般取0.01,0.03,0.1,0.3..... 为什么梯度...
  • 每次启动程序,在有注册文件的情况下,程序就会通过DES和base64解码,并与此刻获取到的C盘卷序列号比对,如果一致则运行主程序。如果注册文件解码后与卷序号不一致,就要提醒用户输入注册码,如果对新输入的解码后和...
  • 快到有时候还得time.sleep。现在还是在原来的手机上运行脚本,但是速度变的像乌龟一样,几十秒执行一个点击事件,但是在模拟器上运行脚本的速度就跟原来的一样快,为什么现在真机就变慢了...
  • 运行结果却没有一句能翻译成功,全都是KeyError,最后就是UnicodeEncodeError。 ``` # -*- coding: utf-8 -*- # Python版本:3.6,搜狗翻译API,ID和Key均可用。 # 该脚本作用:把从FF下载的文本文档按句...
  • 2021-03-10

    2021-03-10 21:38:00
    试用场景:每次连接...2、通过分析登陆页面的JavaScript 来搞定加密方式,在pc端是可以实现的,但是同样的问题是出现在iOS端的,是否能够使用iOS 的快捷指令来运行加密的python脚本?可以通过pythonista来运行。 ...

    试用场景:每次连接校园网WiFi 或者电脑开机之后,都需要登陆账号密码才能连接互联网。如何利用python这一工具来解决呢?

     

    在手机端自动登陆校园网的两种思路:

    1、通过python selenium库来模仿点击,这个在pc端肯定是可行的,但是如何在ios端解决问题呢?

    2、通过分析登陆页面的JavaScript 来搞定加密方式,在pc端是可以实现的,但是同样的问题是出现在iOS端的,是否能够使用iOS 的快捷指令来运行加密的python脚本?可以通过pythonista来运行。

    展开全文
  • 爬虫运行完毕后,所有数据将保存在data文件夹下,data文件夹每次重新运行程序会自动删除旧的。 CNKI_download -- data 存放所有爬取数据 -- CAJs 存放所有下载的caj原文 -- xxxxxxx.caj -- xxxxxxx.caj -- ...
  • 17、指定增量字段,配置定时任务自动获取每次的数据区间,任务失败重试,保证数据安全; 18、页面可配置DataX启动JVM参数; 19、数据源配置成功后添加手动测试功能; 20、可以对常用任务进行配置模板,在构建完JSON...
  • 注释也很重要啊,菜的抠脚的我,每次都是写完代码后再补充注释,哈哈哈。。。 GitHub及Git使用 如何选择开源许可证? from 阮一峰的网络日志 原文链接:...
  • 3,如果不想每次都按 [Run] 来执行程序,那么可以试试 [Auto Run] 这个功能,当然,这样的话就只能按默认参数来执行命令了) 2:扫描 AP 时会出现详细信息;扫描 AP 的时间设置为: 5sec/15sec/30sec/1min/5min/15...
  • 并非允许,但是软件并不会自动去请求, 而是直接导致读取撤回图片失败, 这个可以也一下读取权限检测(或提醒) 5. 关于wechat只能截取系统消息列表, 不能在聊天时截取信息的问题, 我想到的简单思路就是同时在PC开一个...
  •  --- 更新 minileaf 制作的自动测试脚本:minidwep-wpa-1129.tce ,该版本现已支持 WPA/WPA2 --- 将 FeedingBottle 更新至 3.0 RC11:增设一个高级用户界面,相当于一个命令生成器,这个功能可以在免去输入繁杂...
  • 因为我们只需要为每次函数的运行付费。函数不运行,则不花钱,也不会浪费服务器资源</li></ul> <p><a name="bab49b2a"></a></p> <h3>Serverless 服务中的前端解决方案架构图 <p><img alt="" src=...
  • iuhyiuhkjh908u0980

    2009-12-31 19:13:36
    一、理论篇: 持续集成鼓励尽量短周期内项目团队的代码提交,同时保证每次check in都不会损害我们的构建通过。它跟每日构建的区别就在于代码提交频率更高(一般为一个小时),构建的频率也更高,这样做的目的就是...
  • freemarker总结

    2015-01-04 14:22:05
    有一种特殊的字符串称为raw字符串,被认为是纯文本,其中的\和{等不具有特殊含义,该类字符串在引号前面r,下面是一个例子: ${r"/${data}"year""}屏幕输出结果为:/${data}"year" 转义 含义 ...
  • 自己每次运行项目,大概是2到5分钟 如果出现编译失败,可以看看该目录下7.1编译失败,记录常见编译错误。如果其他问题,大都可以谷歌解决。如果编译耗时,可以根据run build查看每个模块的编译时间【也就是找出编译...
  • 东莞、中山、儋州等不设区的直筒子市没有第三级区级,自动添加同名的一级作为区级,以保证整个数据结构的一致性,添加的城区编号以上级的ID结尾两个0作为新ID,此结构ID兼容性还不错,比如:东莞(4419)下级只有...
  • 3、运行对应任务的脚本(GPU方式): 会自动下载模型和任务数据并开始运行。 bash run_classifier_xxx.sh 如运行 bash run_classifier_iflytek.sh 会开始iflytek任务的训练 4、tpu使用方式(可选) cd CLUE/...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

python每次运行自动加1

python 订阅