【测试人员兼职指南】利用专业技能:如何从测试转向开发赚钱

简介: 本文分享了作者作为测试人员如何利用专业技能转向开发来兼职赚钱的经验,包括分析和解决登录页面跳转、避免重复账号注册、用户登录后首页显示用户名以及添加退出功能等问题,并提供了Django项目中使用sqlite3数据库和后台管理的扩展技巧。

一、赚钱:无论何时何地,它从来都不寒碜

题主至今尝试性承接兼职以来,赚了也有小几千了,虽然这点钱,赚了花了也没啥感觉,收入支出并没有多大变化,但是这种助人为乐、好为人师的情绪却是饱满了不少,在跟雇主的沟通过程中发现,他们并不是很在行开发或者具有开发者思维,或许因为他们大多数是初学者或者是学生的身份,所以在收取酬劳的时候 ,多少有些恻隐之心,只想尽可能的帮助到他们,从1到500不等,至今最高才500/次;所以话不多说,先看雇主的诉求,题主又是如何入坑开发的!

tips:做兼职时千万要忘记自己原有的职业,否则兼职做事很受限制!
譬如题主本职是测试,但偶尔可以做一些开发、运维等岗位的工作(都是初阶的)!

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

二、分析:永远不要相信解决一个问题就真的只是一个问题

作为一个测试,如果相信开发提测的代码没有质量问题,那么他的测试职业生涯也就该结束了,命运这东西还是掌握在自己手里会放心的多。并且作为一员10+年测试老兵,就算是做兼职,也不要盲目去相信别人提交的代码,他要是没问题也就不会来找你解决了,所以经过一番自测,得出结论如下:
1、登录问题,没有校验账号密码为空的情况,从源码来看,登录成功之后的页面跳转也有问题;
2、注册问题,正常一点的注册都需要做二次密码确认,再有注册时需要避免账号名重复
3、原本解读的需求是:用户登录成功之后,需要跳转到首页,(附加:在首页显示用户名)
4、再额外附加一个需求:用户在首页点击退出之后需要清除当前token缓存,恢复未登录状态

2.1、登录源码:页面跳转
  • 先解决登录跳转问题,从源码看就是页面重定向问题
def login(request):
    if request.method == 'GET':
        return render(request, 'userApp/login.html')

    if request.method == 'POST':
        # 如果登录成功,返回baidu界面
        name = request.POST.get('name')
        passwor = request.POST.get('passwor')
        # 查询用户是否在数据库中
        if Users.objects.filter(u_name=name).exists():
            user = Users.objects.get(u_name=name)
            if check_password(passwor, user.u_password):
                return HttpResponseRedirect('base.html')
            else:
                return render(request, 'userApp/login.html', {
   
   'passwor': '用户密码错误'})
        else:
            return render(request, 'userApp/login.html', {
   
   'name': '用户不存在'})

在这里插入图片描述

错在校验帐号密码正确了,却跳转到base.html,不应该是去/首页就行了吗?所以需要修改return HttpResponseRedirect(“/”)

# 查询用户是否在数据库中
if Users.objects.filter(u_name=name).exists():
    user = Users.objects.get(u_name=name)
    if check_password(passwor, user.u_password):
        return HttpResponseRedirect('/')

留下一个思考题:redirect和HttpResponseRedirect的区别,貌似使用哪个都能正确跳转

2.2、登录/注册:避免重复帐号注册

从错误截图不难看出,它return了两个帐号,在代码user = Users.objects.get(u_name=name)处就报错了;然后去数据库求证,使用navicat工具连接sqlite3数据库检查用户表,果然出现了大量的重复帐号数据;所以找到用户views.py模块修改注册函数;顺带加了二次确认密码的逻辑

def regist(request):
    # 一开始不要判断GET,直接return一个html模版即可
    if request.method == 'POST':
        # 注册
        name = request.POST.get('name')
        passwor = request.POST.get('passwor')
        passwor2 = request.POST.get('passwor2')

        # 注册加了些逻辑,帐号不存在、是否输入密码
        if not all([name, passwor, passwor2]):
            return render(request, './regist.html', {
   
   "messagesbox": "×帐号或密码不能为空,请重新输入!"})

        if Users.objects.filter(u_name=name).exists():
            # messages.success(request, "用户已存在,请重新注册!")
            return render(request, './regist.html', {
   
   "messagesbox": "×用户已存在,请重新注册!"})

        if passwor != passwor2:
            # messages.success(request,"两次密码输入不正确,请重新确认密码!")
            return render(request, './regist.html', {
   
   "messagesbox": "×两次密码不正确,请重新输入!"})

        # 以上不为空、不重复帐号、两次密码正确,才对密码进行加密,然后再创建用户
        passwor = make_password(passwor)
        Users.objects.create(u_name=name, u_password=passwor)
        return HttpResponseRedirect(reverse('userApp:login'))
    return render(request, './regist.html')
  • 修改regist.html页面:
<form action="" method="POST">
    {% csrf_token %}
    注册学号:<input type="text" name="name" value=""><br>
    注册密码:<input type="passwor" name="passwor"><br>
    确认密码:<input type="passwor" name="passwor2"><br> <!-- 二次确认密码 -->
    <div id="mydiv">
        <span class="mystyle"> {
  
  { messagesbox }} </span> <!--变量要与函数返回的名字保持一致-->
    </div>
    <input type="submit" value="提交">
</form>

在这里插入图片描述

2.3、用户登录之后,需要在首页显示用户名

在这里插入图片描述

  • 先修改base.html页面:找到登录按钮那部分
{# 判断是否已经登录;这里可以保持登录态 #}
            {% if request.session.user_name|default:'' != '' %}
            {# default过滤器进行判断如果request.session.user_name不等于空字符串则用户登陆状态为true #}
            {# 也就是说当用户为已登陆状态时则显示用户名 #}

            <div class="col-md-3 hidden-xs">
                欢迎您:<span>{
  
  { request.session.user_name }} | </span>
                <a href="{% url 'userApp:loginOut' %}">退出</a></em>
            </div>
            {% else %}
            {# 由if判断是否登录来显示按钮功能 #}
            <div class="col-md-3 hidden-xs">
                <div class="caption">
                    <a href="{% url 'userApp:login' %}" role="button">登录</a>
                </div>
            </div>
            {% endif %}
  • 再修改登录函数,密码校验无误之后,将用户昵称放在session里给页面使用
# 查询用户是否在数据库中
if len(Users.objects.filter(u_name=name)) == 1:  # 源码Users.objects.filter(u_name=name).exists()
    user = Users.objects.get(u_name=name)
    if check_password(passwor, user.u_password):
        request.session['user_name'] = name  # 这行代码就是给base用的,需要将登录成功的用户名放在session里
        # 这个是路径问题,你的base模版需要到哪里去,
        return redirect('/')
2.4、附加一个功能,就是退出

退出很简单,题主的理解就是刷新session让它消失;html页面已经在base中写好了:退出

def loginOut(request):
    auth.logout(request)
    return redirect('/')

三、结尾:不管是开发还是测试,只要能赚钱,在IT岗都要能吃得下

题主结果的项目已经算是形形色色了,从python到java环境部署、从自动化测试到Python开发,兼职都快要把题主给榨干了,你想啊,除了测试/运维意外,开发的活儿,题主真的是绞尽脑汁才能做得出来,当然也确实有做不出来的,主要是时间成本/学习成本过大,不划算;没错,就是学习成本,你可能不知道,有些需求都是题主临阵磨枪找资料摸索解决的,虽然报酬一般,但是技能也算得上初窥门径了,再有同样的活儿也能单手接下了。
So,不管怎样,人总是需要有进步,还要想办法多赚钱,这样或许人生有点意思的事情,共勉吧,少年!
日拱一卒无有尽,功不唐捐终入海。

扩展1:Django可以使用sqlite3轻量级数据库
  • 这样着实方便,省去了自己搭建或去找远程数据库服务器的时间
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DATABASES = {
   
   
    'default': {
   
   
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # 指定本地数据库文件路径
    }
}
扩展2:需求方没有提及的后台管理

python manage.py createsuperuser

在这里插入图片描述
访问:http://127.0.0.1:8000/admin
在这里插入图片描述
登录成功的页面
在这里插入图片描述

相关文章
|
3月前
|
jenkins 测试技术 应用服务中间件
【专业测试技能】全流程掌握:部署测试环境的策略与实践
本文分享了关于部署测试环境的策略与实践。文章讨论了部署测试环境的全过程,包括服务如MySQL、Redis、Zookeeper等的部署,以及解决服务间的依赖和兼容问题。文中还介绍了使用Jenkins、Docker等工具进行部署的方法,并通过实战案例讲解了如何创建和管理Jenkins Job、配置代理服务器Nginx、进行前后端服务的访问和优化。最后,作者强调了提问的重要性,并鼓励大家通过互联网解决遇到的问题。
87 2
【专业测试技能】全流程掌握:部署测试环境的策略与实践
|
3月前
|
Java 测试技术 开发者
在软件开发中,测试至关重要,尤以单元测试和集成测试为然
在软件开发中,测试至关重要,尤以单元测试和集成测试为然。单元测试聚焦于Java中的类或方法等最小单元,确保其独立功能正确无误,及早发现问题。集成测试则着眼于模块间的交互,验证整体协作效能。为实现高效测试,需编写可测性强的代码,并选用JUnit等合适框架。同时,合理规划测试场景与利用Spring等工具也必不可少。遵循最佳实践,可提升测试质量,保障Java应用稳健前行。
49 1
|
3月前
|
测试技术 持续交付 Apache
深度挖掘:Python性能测试中JMeter与Locust的隐藏技能🔍
【8月更文挑战第5天】随着软件规模扩大,性能测试对系统稳定性至关重要。Apache JMeter和Locust是两大主流工具,各有千秋。本文探索它们在Python环境下的进阶用法,挖掘更多性能测试潜力。JMeter功能强大,支持多种协议,可通过命令行模式执行复杂测试计划,并与Python集成实现动态测试数据生成。Locust基于Python,通过编写简洁脚本模拟HTTP请求,支持自定义请求及与Python库深度集成。掌握这些技巧可实现高度定制化测试场景,有效识别性能瓶颈,提升应用稳定性。
126 1
|
1月前
|
测试技术 网络安全
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
文章全面介绍了软件测试的基本概念、目的、岗位分类、与开发和调试的区别,并阐述了成为优秀测试人员应具备的素质和技能。
170 1
什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别? 一位优秀的测试人员应该具备哪些素质? 软件测试等相关概念入门篇
|
3天前
|
安全 测试技术 持续交付
云计算时代的软件开发与测试:高效、灵活、可扩展
云计算时代的软件开发与测试:高效、灵活、可扩展
|
28天前
|
人工智能 监控 测试技术
云应用开发平台测试
云应用开发平台测试
44 2
|
1月前
|
敏捷开发 测试技术
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
文章详细介绍了软件开发过程中的不同开发模型(瀑布、螺旋、Scrum)和测试模型(V模型、W模型),以及增量和迭代的概念,最后阐述了敏捷思想及其在敏捷开发(如Scrum)中的应用。
58 0
开发模型(瀑布、螺旋、scrum) 和 测试模型(V、W)、增量和迭代、敏捷(思想)及敏捷开发 scrum
|
2月前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
71 1
|
3月前
|
算法
测试工程师的技能升级:LeetCode算法挑战与职业成长
这篇文章通过作者亲身体验LeetCode算法题的过程,探讨了测试工程师学习算法的重要性,并强调了算法技能对于测试职业成长的必要性。
68 1
测试工程师的技能升级:LeetCode算法挑战与职业成长
|
2月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
98 4